将我的Android应用程序签名为系统应用程序
在我的公司,我们希望在现场完全控制电池消耗,仅使用2g和gps可以快速耗尽电池。我们的决定是我们需要拥有移动电话的root权限,这样当手机闲置时,我们会关闭那些不必要的电池消耗。 此外,我们也不允许用户将其卸载并清除数据。
我的问题是:
答案 0 :(得分:11)
以下是你的答案,
您可以从中找到平台密钥 HERE。签署apk(用于linux)的命令是:
java -jar signapk.jar -w platform.x509.pem platform.pk8 APPLICATION.apk APPLICATION_sign.apk
如果您使用平台密钥对apk进行签名,则无法获得root访问权限,您可以直接从" adb install"命令,是的,在某种程度上它就像root'因为它可以访问所有内部api,但请记住,如果你的应用程序是系统签名的,那么你就不能写外部存储。
首先,不要将root用户组合在一起,系统应用程序是应用程序类型,区别于链接下面的正常应用程序可能会让您对此产生混淆。
what-is-the-difference-between-android-user-app-with-root-access-and-a-system-ap
答案 1 :(得分:9)
回答你的三个问题:
1 - 我从哪里获得这些签名密钥?
发布密钥
部分中的Android's own documentationAndroid树包含测试密钥 建立/目标/产品/安全
但下一部分是你应该注意的地方
由于测试密钥是公开的,任何人都可以签名 .apk文件具有相同的键,这可能允许他们替换或 劫持您的操作系统映像中的系统应用。出于这个原因,它是 签署任何公开发布或部署的Android操作系统映像至关重要 使用一组特殊的释放键,只有你才能访问。
所以基本上除非你能以某种方式获得制造商的pvt键的访问权限,否则可能很难实现。这就是为什么之前评论中的用户说这通常是通过生成自己的构建来实现的。
2 - 它是否会像root用户一样成功管理 签名?
通过这样做您将无法获得“root访问权限”,但您将获得极高级别的访问权限。具体来说,这会让您获得授权android:protectionLevel="signature"
的权限,可以说是最独特的权限。
另一个危险后果(或乐趣,取决于你如何看待它)是你现在可以在系统用户进程android:sharedUserId="android.uid.system"
下运行你的应用程序 - 在android的“进程沙盒”安全规则下这通常会失败。
3 - Root与Signed with key有什么区别?
使用您的构建中使用平台密钥签名的应用程序,您可以获得上述权限,或使用UID 1000(系统uid)运行您的应用程序,这在Android中比其他应用程序的UID更强大,因为它可以请求的权限,这是Android的特定行为。 在root设备中,您可以使用在基于Linux的系统中具有最广泛访问权限的UID 0(root),您可以绕过操作系统上的大多数安全沙盒/检查/围栏。
希望这会有所帮助;)
答案 2 :(得分:0)
对于任何遇到此问题的人,即使在阅读了无法使之生效的注释之后,也可能是因为缺少某些东西(特别是遇到OPENSSL错误),这就是您需要的一切。
signapk.jar
文件和库。platform.x509.pem
和platform.pk8
java -Xmx2048m -Djava.library.path="~/../sdk/tools/linux/lib64" \ # In the cloned sdk
-jar ~/../sdk/tools/lib/signapk.jar \ # In the cloned sdk
platform.x509.pem platform.pk8 \ # The keys for signing (from step 2)
app-prod-release.apk release.apk # The app to sign and the signed app