android.os.SystemProperties 在哪里?
我正在查看 Android 相机代码,当我尝试导入 android.os.SystemProperties
时,找不到它。
我创建了一个新的 2.1 项目并尝试再次导入此命名空间,但是仍然找不到。我检查了 https://developer.android.com 并且未列出 SystemProperties
。
我错过了什么吗?
I'm looking at the Android Camera code, and when I try importing android.os.SystemProperties
, it cannot be found.
Here is the file I'm looking at:
https://android.googlesource.com/platform/packages/apps/Camera/+/eclair-release/src/com/android/camera/VideoCamera.java
I created a new 2.1 project and tried importing this namespace again, but It still cannot be found. I checked https://developer.android.com and SystemProperties
was not listed.
Did I miss something?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
如果您使用“反射”选项,您可以使用下面的类
If you use the "reflection" option, you may use the class below
这是Android源代码中的类:
https://android.googlesource.com/platform/frameworks/base/+/eclair-release/core/java/android/os/SystemProperties.java
请参阅
{@hide}
在 JavaDoc 类中?这意味着此类不会作为公共 SDK 的一部分导出。相机应用程序使用它,因为它是内部的,并且他们不会使用公共 SDK 来构建它。
您仍然可以
通过反射或
通过获取源代码、删除
@hide
并创建自己的类来 获取此类定制 SDK。
然而,根据定义,您现在将“
off SDK
”,因此您的应用程序很可能会被破坏或在操作系统版本上获得不同的行为,因为 Android 人员会不遗余力地在版本之间更改此类。This is the class in the Android source code:
https://android.googlesource.com/platform/frameworks/base/+/eclair-release/core/java/android/os/SystemProperties.java
See
{@hide}
in the class JavaDoc? That means this class won't be exported as part of the public SDK.The camera app uses it as it's internal and they won't use the public SDK to build it.
You may still be able to get at this class
by reflection or
by getting the source, removing
@hide
and making your owncustomized SDK.
However pretty much by definition you are now going '
off SDK
' and therefore your app may well be broken or get different behavior on OS versions as the Android folks will make little effort not to change this class between versions.作为用户 Void 的答案发布的课程有很多不必要的东西。这是我的类,它使用 上的反射android.os.SystemProperties:
The class posted as an answer from user Void has a bunch of unnecessary things. Here is my class that uses reflection on android.os.SystemProperties:
您可以执行 getprop 命令:
You could exec out to the
getprop
command:经过一番折腾后,我终于得到了上面的反射代码,可以设置和创建新的本机系统属性,但有一些注意事项:
您需要成为系统用户,添加: android:sharedUserId="android.
您需要使用平台密钥对 APK 进行签名,我作弊并只是覆盖了 Eclipse 中的默认调试签名密钥,如下所示:
http://stoned-android.blogspot.co.uk/2012_01_01_archive.html
本机系统属性服务有一个ACL,它控制对可以破坏关键空间的属性的所有写访问(例如sys.或debug.)。看
/system/core/init/property_service.c:
{ "net.", AID_SYSTEM, 0 },
{“开发”,AID_SYSTEM,0},
{“运行时。”,AID_SYSTEM,0},
{“硬件”,AID_SYSTEM,0},
{“系统”,AID_SYSTEM,0},
{“服务。”,AID_SYSTEM,0},
{“无线局域网。”,AID_SYSTEM,0},
{ "dhcp.", AID_SYSTEM, 0 },
或者,如果您正在滚动自己的构建,则可以添加自己的密钥(如果您确实想要),但重用上述其中之一似乎更容易。
After a lot of messing around I've finally got reflection code above working to both set and create new native system properties, there are some caveats:
You need to be the system user, add: android:sharedUserId="android.uid.system" to the manifest.
You need to sign your APK with the platform key, I cheated and just overrode the default debug signing key in eclipse as show here:
http://stoned-android.blogspot.co.uk/2012_01_01_archive.html
The native system properties service has an ACL that controls all write access to properties you can subvert a key space (such as sys. or debug.). See
/system/core/init/property_service.c:
{ "net.", AID_SYSTEM, 0 },
{ "dev.", AID_SYSTEM, 0 },
{ "runtime.", AID_SYSTEM, 0 },
{ "hw.", AID_SYSTEM, 0 },
{ "sys.", AID_SYSTEM, 0 },
{ "service.", AID_SYSTEM, 0 },
{ "wlan.", AID_SYSTEM, 0 },
{ "dhcp.", AID_SYSTEM, 0 },
Or if you are rolling your own build you could add your own key if you really wanted but it seems easier to reuse one of the above.
以下是读取系统属性的方法。我也包含了一个后备方案:
使用反射它的工作速度比从进程输出中读取要快得多。在我测试的某些设备(小米红米 8)上大约快了 30 倍。
所以值得尝试一下。
Here's how you can read from the system properties. I've included a fallback too :
Using reflection it works much faster than reading from the process output. About x30 faster on some device I tested (Xiaomi Redmi 8).
So it's worth to try it instead.
经过大量搜索,我找到了一种为 Android 设置系统属性的方法。
我无法找到 Android Lollipop 版本的解决方案。但我成功地做到了这一点。为了设置系统属性,我们需要使用:
例如
SystemProperties.set("sys.android", 5.0)
现在您需要授予新系统属性权限
转到
/home/inkkashy04/Android_Lollypop/external/sepolicy/property_contexts
并对您的财产给予适当的许可
现在刷新图像后,您可以看到按命令列出的系统属性:
After lots of searching I found a way to set the system property for Android.
I was not able to find solution for Android Lollipop version. But I was successful in doing so. For setting system property we need to use :
e.g.
SystemProperties.set("sys.android", 5.0)
Now you need to give permissions to the new system property
Go to
/home/inkkashy04/Android_Lollypop/external/sepolicy/property_contexts
and give suitable permission to your property
Now after flashing your image you can see your system properties listed by command:
梯度方法:
Gradle approach :