美文网首页学习学习之鸿蒙&Android
Android Studio使用platform签名

Android Studio使用platform签名

作者: 后知晚觉 | 来源:发表于2021-07-27 16:54 被阅读0次

Android系统的安全策略之一,是使用签名来区分APK安装时被赋予的用户权限,常规开发者使用自定义的签名,则开发出的APK被安装到系统中只属于普通用户,只具有有限的权限。

如果厂商开发的APK使用了操作系统的platform签名,再额外指定如android.uid.system的属性,则厂商开发的APK则会具有system或其他高级用户权限,system用户的权限很高,可以访问很多APK访问不了的资源。

而platform签名(.pk8)与常规开发者使用自定义的签名的格式(.jks)是不一样的。

需要将pk8格式的文件转成jks,才能够在Android Studio中方便的开发高权限App,否则只能使用命令方式对apk做签名(signapk.jar),然后push到系统中,通过观察log来判断程序运行是否正常。

工具准备

platform签名:

$ ls build/target/product/security/platform.*
build/target/product/security/platform.pk8
build/target/product/security/platform.x509.pem

keytool-importkeypair

https://github.com/getfatday/keytool-importkeypair

AS生成jks格式的签名

Build->Generate Signed Bundle/APK->APK->Create New:

选择Key store path

设置Password、Key Alias、Password等信息:


image-20210727163134611.png

格式转换

将platform.x509.pem、platform.pk8拷贝到platform.jks同级目录下。

将keytool-importkeypair脚本也下载到这个目录下,并赋予可执行权限。

执行命令:

$ ./keytool-importkeypair -k platform.jks -p 111111 -pk8 platform.pk8 -cert platform.x509.pem -alias platform
Importing "platform" with SHA1 Fingerprint=27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA
Importing keystore /tmp/keytool-importkeypair.tOWV/p12 to platform.jks...
Existing entry alias platform exists, overwrite? [no]:  yes
Entry for alias platform successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Warning:
<platform> uses the MD5withRSA signature algorithm which is considered a security risk and is disabled.

配置AS

在build.gradle文件中添加下面的内容:


android {
    ...

    defaultConfig {
        ...
    }

    signingConfigs {
        release {
            storeFile file("../platformjks/platform.jks")
            storePassword '111111'
            keyAlias 'platform'
            keyPassword '111111'
        }

        debug {
            storeFile file("../platformjks/platform.jks")
            storePassword '111111'
            keyAlias 'platform'
            keyPassword '111111'
        }
    }

    ...
}

在manifest中添加android.uid.system:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.abc.factoryapp.myapplication" android:sharedUserId="android.uid.system">

    <application
        ....
    </application>

</manifest>

运行apk,查看uid

35wsfd:/ # ps -ef | grep abc                                                                                    
u0_a141        5485   5477 0 19:29:05 136:0 00:00:00 install_server-141cf06d com.abc.factoryapp.myapplication
system         5822    623 6 20:13:20 ?     00:00:00 com.abc.factoryapp.myapplication

由ps命令结果可知,我们的apk被安装到系统中后,被赋予了system用户。

相关文章

网友评论

    本文标题:Android Studio使用platform签名

    本文链接:https://www.haomeiwen.com/subject/luuomltx.html