系统应用的自动签名方式

最近需要开发一个拥有系统级权限的应用,就了解了下系统应用的签名方式,这里来简单介绍下。

在进行 Android 应用开发的时候,如果开发的是系统应用,那么就需要有系统签名才能正常运行,而系统应用一般是放到系统代码库中跟随系统一起编译。如果想要用 Android Studio 单独对某个开发的应用进行签名的话,有两种方式可以选择。
一种方法是编译完成后使用 signApk.jar 、platform.pk8 和 platform.x509.pem 进行配合签名。
第二种方法是把系统的 platform.pk8 和 platform.x509.pem 转换成为我们可以直接使用的 keystore 文件,在编译时自动签名。

相对而言,第二种方法更为方便,可以全自动化对应用进行签名,方便开发人员测试。
这里介绍下第二种方式的实现方法。
最近在做一个FOTA项目,在AndroidManifest.xml文件中有如下属性

android:sharedUserId="android.uid.system"

在android studio中编译出来apk就是安装不上,报如下错误

INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

看来是要系统的签名, 但是 由于客户lib库使用了自己扩展android SDK版本,没法放在我们的源码里面编译; 后来google了下,发现可以让android studio支持系统签名,这就用到了keytool-importkeypair ,

首先,需要使用到 keytool-importkeypair 这个工具

可以在 https://github.com/getfatday/keytool-importkeypair 下载

然后,运行如下命令,就可以利用 platform.pk8 和 platform.x509.pem 生成 keystore 文件

./keytool-importkeypair -k ./release.keystore -p youPassword -pk8 platform.pk8 -cert platform.x509.pem -alias youAlias

mac上运行以下命令

sh keytool-importkeypair.sh -k ./platform.keystore -p youPassword -pk8 platform.pk8 -cert platform.x509.pem -alias youAlias

其中

-k 表示要生成的 keystore 文件的名字,这里命名为 release.keystore
-p 表示要生成的 keystore 的密码,这里是 youPassword
-pk8 表示要导入的 platform.pk8 文件
-cert 表示要导入的platform.x509.pem
-alias 表示给生成的 release.keystore 取一个别名,这是命名为 youAlias

然后在build.gradle中配置自动签名

 signingConfigs{
        dubug{
            storeFile file ('../platform.keystore')//签名文件路径,
            //keystore的路径通常使用项目根目录的相对路径,但也可以是使用绝对路径,尽管这不推荐
            storePassword youPassword //密码
            keyAlias youAlias
            keyPassword youPassword  //密码
        }
        release{
            storeFile file ('../platform.keystore')//签名文件路径,
            //keystore的路径通常使用项目根目录的相对路径,但也可以是使用绝对路径,尽管这不推荐
            storePassword youPassword //密码
            keyAlias youAlias
            keyPassword youPassword  //密码
        }
    }

这样配置后安装apk就不会出现安装不上报错的现象了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值