自动生成带系统签名的apk

系统签名的意义

    通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中.所以默认就是可以互相访问任意数据. 也可以配置成运行成不同的进程, 同时可以访问其他APK的数据目录下的数据库和文件.就像访问本程序的数据一样,据有所有的系统权限,进行所有的系统操作。

签名的方式有散三种:

第一种:CMD命令方式

       做系统签名必须要拿到的三个文件platform.x509.pem,platform.pk8,signapk.jar。其中platform.x509.pem,platform.pk8存放在android系统源码的/build/target/product/security/目录下,系统封装工具signapk.jarout/host/linux-x86/framework/目录,找到这三个文件后就可以做我们的app签名了。在你的jdk环境下,使用cmd命令行执行如下命令:

java -jar signapk.jar platform.x509.pem platform.pk8 XXX.apk XXXNew.apk

这样我们生成的app就是有系统签名的app了,但是我们每次都要使用命令的方式来执行给我们开发调试的app签名是不是很烦,有没有更好的方式呢?下面就重点说下keysotre的方式。

第二种:Android studio的方式

      本质的原理是给apk加上开发者签名(jks文件),使用keytool-importkeypair 对jks文件进行系统签名,在出包的时候,直接使用带有系统签名的jks对apk进行签名,这样编译生成的apk文件就自带系统签名了。

      这种方式也是需要上面提到的这两个文件platform.x509.pem、platform.pk8(位于../build/target/product/security)。

1.AndroidManifest.xml中添加

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.system"

通过android:sharedUserId="android.uid.system"让APP应有系统的权限

2.生成jks文件

新建个目录(建议放在工程目录的signAPK目录下),拷贝platform.x509.pem、platform.pk8,然后在终端此目录下做如下操作生成jks文件:

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:123456 -name SignDemo`

keytool -importkeystore -deststorepass 123456 -destkeystore ./SignDemo.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 123456

上面的文件密码:123456  用户名:SignDemo。这里很重要,后续要用到。

3、生成你自己的jks文件(说明:图片均来自网络)

          

如果,之前没有的就新建,点击Create New ...  设置密码(易记,建议123456),如下图:

 

        然后Next -- Finish

4、配置gradle(app)

在在Android区域下(与defaultConfig同级)添加signingConfigs配置:

依次填写jks的路径,密码,别名等

apply plugin: 'com.android.application'  android {
    compileSdkVersion 23  buildToolsVersion "23.0.2"   defaultConfig {
        applicationId "com.cxq.signdemo"  minSdkVersion 19  targetSdkVersion 23  versionCode 1  versionName "1.0"  }
    signingConfigs {
        release {
            storeFile file("../signApk/SignDemo.jks")
            storePassword '123456'
  keyAlias 'SignDemo'
   keyPassword '123456'  }

        debug {
            storeFile file("../signApk/SignDemo.jks")
            storePassword '123456'
   keyAlias 'SignDemo'
   keyPassword '123456'  }
    }
    buildTypes {//友情提醒:注意如下的设置,网上很多帖子写的有问题
         release {
             minifyEnabled false
      signingConfig signingConfigs.release
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
         debug {
             minifyEnabled false
             signingConfig signingConfigs.debug
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'  compile 'com.android.support:appcompat-v7:23.3.0' }

5.经过以上配置之后,点击run,app就可以直接安装到手机上了

第三种方法:通过系统编译进行签名

1.AndroidManifest.xml中添加

 

 

android:sharedUserId="android.uid.system"

 

 

2.自己写个Android.mk文件,修改如下内容。

 

LOCAL_CERTIFICATE := platform

 

用系统签名对APP进行签名
3.通过make进行系统编译,更新镜像。


你可能感兴趣的:(android)