美文网首页学习学习之鸿蒙&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