第一部分:Android Studio apk系统签名

背景描述:

有时候,我们开发的apk需要用到系统权限,需要在AndroidManifest.xml中添加共享系统进程属性:
android:sharedUserId=”android.uid.system”
android:sharedUserId=”android.uid.shared”
android:sharedUserId=”android.media”
这时候apk的签名就需要是系统签名(platform、shared或media)才能正常使用。


常用APK签名方式:

第一种:Android源码环境下签名
1. 按照系统应用的目录排布,将应用上传到源码编译服务器或虚拟机上,一般在vender目录下。或者拷贝App源码到Android源码的packages/apps/目录下,且App源码是普通(Eclipse)格式的。
2. 配置Android.mk,在其中添加
LOCAL_CERTIFICATE := platform 或 shared 或 media
3. 使用 “mmm/mm + 你的应用路径“的命令来编译你的应用;
此时,out/~目录下所生成的 apk 就有系统的权限了。


第二种:手动签名
这种方式比在源码环境下签名简单,App可以在Eclipse或Android Studio下编译,然后手动给apk重新签名即可。
文件位置:
platform.x509.pem、platform.pk8 在 ../builzaid/target/product/security目录下
signapk.jar 在 ../out/host/linux-x86/framework路径下
signapk源码路径 在 ../build/tools/signapk下
签名命令:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
签名步骤:
1、将相关文件及源apk文件置于同一路径下
2、检查源apk包,去掉META-INF/CERT.SF 和 META-INF/CERT.RSA 文件
3、执行签名命令即可


第三种:利用bat脚本签名(只是将第二种签名方式用bat脚本来执行)


第四种:Android Studio一键Run签名实现
1.原理分析简述
就是通过Android studio 直接给 apk 加上开发者签名(jks文件),使用 keytool-importkeypair 对jks文件进行系统签名,在Run的时候,直接使用带有系统签名的 jks 对 apk 进行签名,这样编译生成的 apk 文件就自带系统签名了。

2.所需的文件
keytool-importkeypair工具的下载(这个工具的作用是将系统签名的相关信息导入到已有的签名文件里)。


在工程根目录下创建类似signApk文件夹来专门存放签名相关文件(
platform.x509.pem、platform.pk8、keytool-importkeypair、SigNature.jks、signature.sh)如下图。
Android Studio apk系统签名和版本描述的实现_第1张图片

3.制作步骤
使用Android studio 生成你自己的 jks 文件
Android Studio apk系统签名和版本描述的实现_第2张图片
如果,之前没有的就新建,点击Create New … 设置密码(易记,建议123456),如下图:
Android Studio apk系统签名和版本描述的实现_第3张图片
然后Next –> Finish


编写签名脚本signature.sh,内容如下

#! /bin/bash#对变量赋值:a="this file is tested succeesfully  "# 现在打印变量a的内容:echo $a# 转换系统签名命令#./keytool-importkeypair -k SigNature.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SigNature./keytool-importkeypair -k SigNature.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SigNature# SignDemo.jks : 签名文件# 123456 : 签名文件密码# platform.pk8、platform.x509.pem : 系统签名文件# SignDemo : 签名文件别名

在cmdx下,定位到signApk文件目录下,执行signature.sh脚本,如下图:
Android Studio apk系统签名和版本描述的实现_第4张图片


配置builde.gradle
为了使自己发布的apk更具保密性,将签名信息放在项目gradle.property下。
Android Studio apk系统签名和版本描述的实现_第5张图片
在modle的builde.gradle下配置
Android Studio apk系统签名和版本描述的实现_第6张图片


如果想直接Run app就是release版且带系统签名的apk,还需修改:
Android Studio apk系统签名和版本描述的实现_第7张图片


buildTypes {    release {        minifyEnabled false        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'        signingConfig signingConfigs.release    }}

这样直接Run app就是带系统签名的release版apk了。


第二部分:apk版本信息控制

android studio apk版本信息不再manifest里面编辑,而是在builde.gradle配置
Android Studio apk系统签名和版本描述的实现_第8张图片

apk输出版本编写

buildTypes {        debug {            // 显示Log            buildConfigField "boolean", "LOG_DEBUG", "true"            versionNameSuffix "-debug"            minifyEnabled false            zipAlignEnabled false            shrinkResources false        }        release {            // 不显示Log            buildConfigField "boolean", "LOG_DEBUG", "true"            // 混淆            minifyEnabled true            // Zipalign优化            zipAlignEnabled true            // 移除无用的resource文件            shrinkResources true            // 前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.release        }        //发布后apk的名称        applicationVariants.all { variant ->            variant.outputs.each { output ->                def outputFile = output.outputFile                def fileName                if (outputFile != null && outputFile.name.endsWith('.apk')) {                    if (variant.buildType.name.equals('release')) {                        fileName = "Sky_v${defaultConfig.versionName}-${"_"}-${releaseTime()}.apk"                    } else if (variant.buildType.name.equals('debug')) {                        fileName = "Sky_v${defaultConfig.versionName}-${"_"}-${releaseTime()}_debug.apk"                    }                    output.outputFile = new File(outputFile.parent, fileName)                }            }        }

至此,本章内容介绍完毕。请大家多多指点。

转载请注明:http://blog.csdn.net/veryliu

更多相关文章

  1. android 开发对gif解码(适配android 4.2、4.3、4.4版本)
  2. Android™ 2.1系统图标
  3. Android 系统完整的权限列表
  4. Android 系统图标大全
  5. android系统图标
  6. Android API与Android版本的关系
  7. 如何更新Android Studio版本
  8. Android文件操作

随机推荐

  1. Android 分享文本和图片
  2. Android ScrollView的使用
  3. Android(安卓)Intent Action 大全(转)
  4. FIDO框架分析3(FIDO UAF Android客户端)
  5. h5页面点击按钮,触发手机自带的发短信
  6. Android如何获取视频预览图(或首帧)和获取
  7. Android AppCompatActivity的ActionBar之
  8. 【Android-tips】 Unable to execute dex
  9. android10.0连接wifi后提示“已连接,但无
  10. 添加并客制化Statusbar中图标显示顺序