打包APK相关问题
- Android Studio 打包APK流程
- 对APK命名的优化
- 打包APK
- 给第三方APK进行系统签名
- Android 中的签名
- 系统默认的四种签名类型
- 系统默认的四种签名类型文件的位置
- 对 APK 进行签名
- ①使用自己的 Android 签名工具对 APK 进行签名(网上资料)
- ②使用过程中问题
- ③ IDE 中添加源码平台生成证书 platform.keystore
Android Studio 打包APK流程
对APK命名的优化
① 自定义APK名字
修改app下的build.gradle
// 自定义打包名称
android.applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "Test_${buildType.name}_v${versionName}.apk"
// 什么也不需要可以选择直接 "自定义name.apk"
// buildType.name 代表构建类型(release/debug)
// versionName 如下图中defaultConfig中的显示
}
}
添加位置如图,在android{}闭包中;
因此我们可以自由的进行自定义命名,甚至可以加上时间,如图,在android{}闭包外增加构建时间函数;
// 构建时间
def generateTime() {
return new Date().format("yyyy_MM_dd_HH_mm_ss")
}
outputFileName加上时间显示
outputFileName = "Test_${buildType.name}_v${versionName}_${generateTime()}.apk"
打包APK
点击导航栏的Build→Generate Signed Bundle / APK…
点击之后显示
点击Next之后,没有store key就创建一个新的;
填好信息,Certificate部分我只填了姓名;
点OK,如果报如下错误(本人未遇到),直接OK就行;
点Next;
选择debug 或者 release;一般debug用于测试,release用于正式发布,二者皆可安装,点Finish;
之后目录内出现debug(或release,或者二者皆有)文件夹,内有APK文件。
给第三方APK进行系统签名
Android 中的签名
系统默认的四种签名类型
四组默认签名供Android.mk在编译APK使用:
1、testkey:普通APK,默认情况下使用。
2、platform:该APK完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system。
3、shared:该APK需要和home/contacts进程共享数据。
4、media:该APK是media/download系统中的一环。
应用程序的Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
系统默认的四种签名类型文件的位置
(android_src)/build/target/product/security
对 APK 进行签名
①使用自己的 Android 签名工具对 APK 进行签名(网上资料)
(1) Android的签名文件存放于系统源码的 build/target/product/security/目录下
(2) Android自带的签名工具为 signapk.jar, 可以在源码编译目录out中找到,具体路径为:out/host/linux-x86/framework/signapk.jar 以上APK具有系统权限,重新签名应该使用platform签名文件进行签名。
签名方法:将对应权限的签名文件platform.pk8、platform.x509.pem, 签名工具 signapk.jar, 以及需要签名的apk(假设 old.apk) 放到同一目录下,打开linux终端(windows cmd也可以),进入该目录,进行重新签名:
java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk
重新生成的new.apk就可以安装在我们的Android设备上了。
②使用过程中问题
- Linux 中使用该命令主线程报错
但生成了新的APK文件。
原因目前未知,目前也没找到解决方案,如果有大神知道解决方案和原因,希望可以不吝赐教! - platform.x509.pem platform.pk8 位置调换错误
所以要慎重注意位置问题!
③ IDE 中添加源码平台生成证书 platform.keystore
- 生成平台platform.keystore文件:
(1)编译平台签名文件“platform.pk8”和“platform.x509.pem”
文件位置:android/build/target/product/security/
(2)把pkcs8格式的私钥转化成pkcs12格式:
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out shared.priv.pem -nocrypt
(3)把x509.pem公钥转换成pkcs12格式:
openssl pkcs12 -export -in platform.x509.pem -inkey shared.priv.pem -out shared.pk12 -name androiddebugkey
密码都是:android
(4)生成platform.keystore
keytool -importkeystore -deststorepass android -destkeypass android -destkeystore platform.keystore -srckeystore shared.pk12 -srcstoretype PKCS12 -srcstorepass android -alias androiddebugkey
- Eclipse 添加证书
将生成的platform.keystore导入eclipse 在eclipse下Windows/preferences/Android/build中设置“Custom debug keystore”为刚才生成的platform.keystore即可
调试apk时直接点击Debug As —> Android Application即使用系统签名签名了该apk - Android Studio 添加证书