当前位置:   article > 正文

使用AndroidStudio生成打有系统签名的apk_android studio jks

android studio jks

前言

Android Studio 开发应用时,adb 连接设备后,可以直接 run 运行到设备上。
当 debug 的是系统应用时,都会配置 android:sharedUserId="android.uid.system"
因为没有打系统签名, 无法直接装到设备上,不利于开发效率。
于是有了AS给应用打系统签名的需求。

要打系统签名,需要如下工具:
1.系统签名文件 platform.x509.pem platform.pk8 ; 在源码 build/target/product/security 路径下;
2.keytool-importkeypair-master 工具以及 Linux 环境;
keytool-importkeypair-master下载链接 https://github.com/getfatday/keytool-importkeypair

一、使用platform.x509.pem platform.pk8生成 jks

在Linux环境下,在 keytool-importkeypair-master 根目录放置 platform.x509.pem 、 platform.pk8 文件,进入 keytool-importkeypair-master 根目录执行

./keytool-importkeypair -k name.jks -p yourpassword -pk8 platform.pk8 -cert platform.x509.pem -alias mykeyalias
  • 1

其中,name.jks 为生成的 jks,name 是 jks 的名称,随便取;
jks 的密码为 yourpassword ,一般为字母和数字;
mykeyalias 为 jks 的别名,随便取;
举例,要生成 beauty.jks,密码为 beauty100 ,别名是 love ,则命令为:

./keytool-importkeypair -k beauty.jks -p beauty100 -pk8 platform.pk8 -cert platform.x509.pem -alias love
  • 1

ps:
jks 是 AndroidStudio 生成的签名。
keystore 是 Eclipse 生成的签名。

生成 keystore 文件也是可以的,如果生成的是 keystore 文件,后面的操作步骤同 jks,将对应的 jks 替换为 keystore 即可。

./keytool-importkeypair -k beauty.keystore -p beauty100 -pk8 platform.pk8 -cert platform.x509.pem -alias love
  • 1

二、AndroidStudio导入jks

我的AS是 4.0 版本,为方便,将生成的 beauty.jks 放到工程的 app/ 目录下,
Build --> Generate Signed Bundle/APK -->APK --> Next
在这里插入图片描述

如图,Choose existing... 选择 app 目录下的 beauty.jks 文件;
Key store password 即为密码,对应 beauty100 ;
Key alias 为别名,对应 love ;
Key password 为别名的密码,保持和 Key store password 一致,要不然编译报错。

下一步,选择 release 版本打签名,debug版本选上也没问题,
v1 、v2 版本签名都打上,Finish
在这里插入图片描述

三、配置 app 的 build.gradle

android { } 里添加 signingConfigs {}signingConfig signingConfigs.release
signingConfigs{ } 要添加在 buildTypes{ } 之前,否则提示 signingConfigs.release 找不到

	
    signingConfigs {
        release {
            storeFile file('beauty.jks')
            storePassword 'beauty100'
            keyAlias 'love'
            keyPassword 'beauty100'
        }
        // 如果 debug 版本也打签名,则添加这一部分
        debug {
            storeFile file('beauty.jks') 
            storePassword 'beauty100'
            keyAlias 'love'
            keyPassword 'beauty100'
        }
        // 如果 debug 版本也打签名,则添加这一部分        
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

其中,
storeFile file('beauty.jks') 指 beauty.jks 相对于 app/build.gradle 文件的路径,
我把 beauty.jks 文件放到了 app/根目录,
app/build.gradle 文件也在 app/ 根目录,所以直接这样写.

如果 beauty.jks 文件放在 app/ 同级目录,则应该这样写:
storeFile file('../beauty.jks')

也可以按照磁盘(windows)目录写:
storeFile file('D:\\xxx\\xxx\\SignedDemo\\app\\beauty.jks')

storePasswordkeyPassword' 保持一致,否则AS编译会报错: Cannot recover key

别忘了在 AndroidManifest.xml 添加 android:sharedUserId="android.uid.system"

至此,配置完成,AS 上编译出来的 app 即是具有系统签名的应用。

四、模拟测试

已经打上系统签名的应用,如何验证是否具有系统权限了呢?

4.1 模拟按键发送

模拟发送 power 键,未打系统签名的应用这样操作是无效的,打了系统签名可以实现关机。

sendKeyCode(KeyEvent.KEYCODE_POWER);

private void sendKeyCode(final int keyCode){
        new Thread() {
            public void run() {
                try {
                    Instrumentation inst = new Instrumentation();
                    inst.sendKeyDownUpSync(keyCode);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

4.2 发送系统受限广播

尝试发送 frameworks/base/core/res/AndroidManifest.xml 文件里定义的某个广播 <protected-broadcast android:name="xxxxxx" />
未打签名的应用发送该广播,log 可看到禁止发送,功能不能正常实现;
打签名的应用发送该广播,log 不会提示禁止发送,功能也正常。

4.3 使用 SYSTEM_ALERT_WINDOW

安卓 8.0 后,非系统应用无法使用 SYSTEM_ALERT_WINDOW ,如下操作会报错

WindowManager.LayoutParams layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
                                    | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
  • 1
  • 2

系统应用则可以正常使用。

4.4 新增 persist.sys 开头的属性

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/737694
推荐阅读
相关标签
  

闽ICP备14008679号