第一部分: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)如下图。

3.制作步骤
使用Android studio 生成你自己的 jks 文件

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

然后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脚本,如下图:


配置builde.gradle
为了使自己发布的apk更具保密性,将签名信息放在项目gradle.property下。

在modle的builde.gradle下配置


如果想直接Run app就是release版且带系统签名的apk,还需修改:


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配置

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 logo:内核、android开机动画
  2. Android(安卓)ListView用法(1),不用ListActivity实现
  3. Android(安卓)5.1 API 22 所有sdk文件下载地址
  4. 【黑马Android】(02)短信发送器/布局演示/android下单位/android
  5. android gallery的使用
  6. Android文件操作
  7. Android(安卓)文件存储 和 权限管理
  8. 改变ToggleButton的图片
  9. android读写XML

随机推荐

  1. Android Studio打包APK时出现android stu
  2. Android获取当前运行的service
  3. Android处理图片
  4. Android中SDK供第三方调用实现详解
  5. android 记录所有打开的Activity,退出程序
  6. ANDROID Porting系列八、Keymaps and Key
  7. android webview goback 跳过页面302自动
  8. Android底部虚拟按键遮挡应用
  9. Android绘图之SweepGradient(10)
  10. 给View设置独立border