Android 签名机制,项目签名,ANT打包,优化,发布总结
2015-10-30 14:08
831 查看
Android 签名机制,项目签名,ANT打包,优化,发布总结
Android APK 签名打包的实现原理:
实际开发中,一次完整的Android项目打包要进行以下的几步:编译、代码混淆、打包apk、签名apk、apk优化。
首先,需要有一个
keystore,他是apk的数字签名,在签名apk时候需要。
获取keystore的方法. CMD 进入到jdk的bin目录 keytool -genkey -alias androidapk.keystore -keyalg RSA -validity 20000 -keystore androidapk.keystore
其中参数-validity为证书有效天数,按照提示完成。
Android apk 的 手动打包签名优化:
签名:
jarsigner -verbose -keystore androidapk.keystore -signedjar app_signed.apk app.apk
androidapk.keystore
-keystore: keystore的名称
-signedjar app_signed.apk: 指定签名后生成的APK名称
app.apk: 目标APK
然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。
查看签名:jarsigner -verify app_signed.apk
查看是否签名,如果已经签名会打印 "jar verified".
jarsigner -verify -verbose -certs app_signed.apk
查看签名详细信息。
apk优化
通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)
zipalign -v 4 app_signed.apk androidres.apk 对apk优化
zipalign -c -v 4 androidres.apk 查看apk是否经过优化
ant 自动化打包工具
在 ant release 的时候,会自动进行 编译,混淆,打包,签名,和优化操作。其实现过程如下:
在${sdk.dir}/tools/ant/build.xml 查找 release target 源码如下:
<target name="release"
depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
description="Builds the application in release mode.">
</target>
代码混淆规则:
如果在project.properties中配置了proguard.config=proguard.cfg,release的时候会自动进行代码混淆。在${sdk.dir}/tools/ant/build.xml可以找到相应的target。
<target name="-release-obfuscation-check">
<echo level="info">proguard.config is ${proguard.config}</echo>
<condition property="proguard.enabled"
value="true" else="false">
<and>
<isset property="build.is.mode.release"
/>
<isset property="proguard.config"
/>
</and>
</condition>
<if condition="${proguard.enabled}">
<then>
<echo level="info">Proguard.config
is enabled</echo>
<!-- Secondary dx input (jar files)
is empty since all the
jar files will be in the obfuscated
jar -->
<path id="out.dex.jar.input.ref" />
</then>
</if>
</target>
proguard.enabled的依据就是在release模式下,并且设置proguard.config这个属性
签名规则:签名过程中需要检查keystore和密码
<target name="-release-sign" if="has.keystore"
>
<!-- only create apk if *not* a library project -->
<do-only-if-not-library elseText="Library project: do not create
apk..." >
<sequential>
<property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk"
/>
<!-- Signs the APK -->
<echo level="info">Signing final apk...</echo>
<signapk
input="${out.packaged.file}"
output="${out.unaligned.file}"
keystore="${key.store}"
storepass="${key.store.password}"
alias="${key.alias}"
keypass="${key.alias.password}"/>
<!-- Zip aligns the APK -->
<zipalign-helper
in.package="${out.unaligned.file}"
out.package="${out.final.file}" />
<echo level="info">Release Package: ${out.final.file}</echo>
</sequential>
</do-only-if-not-library>
<record-build-info />
</target>
自定义打包规则:
在 build.xml 中导入自定义的打包规则的文件,
<import file="custom_rules.xml" optional="true" />
然后
可根据 release中的规则和顺序(depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"),自定义自己的规则。
在custom_rules.xml中
重新实现这些字段对应的规则方法。一般都在最后一项“-post-bulid”中完成。
如xxxxx项目中,在编译之前先检查libs库中的.so文件是否一致
和 签名采用自己的签名服务器去做等。实现代码如下:
<taskdef
name="SoChecker"
classname="com.netease.apkchecker.AllSoChecker"
classpath="apkchecker.jar" />
<target name="-post-build" depends="custom_sign,protect" >
<SoChecker apkPath="${out.final.file}" />
</target>
Android APK 签名打包的实现原理:
实际开发中,一次完整的Android项目打包要进行以下的几步:编译、代码混淆、打包apk、签名apk、apk优化。
首先,需要有一个
keystore,他是apk的数字签名,在签名apk时候需要。
获取keystore的方法. CMD 进入到jdk的bin目录 keytool -genkey -alias androidapk.keystore -keyalg RSA -validity 20000 -keystore androidapk.keystore
其中参数-validity为证书有效天数,按照提示完成。
Android apk 的 手动打包签名优化:
签名:
jarsigner -verbose -keystore androidapk.keystore -signedjar app_signed.apk app.apk
androidapk.keystore
-keystore: keystore的名称
-signedjar app_signed.apk: 指定签名后生成的APK名称
app.apk: 目标APK
然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。
查看签名:jarsigner -verify app_signed.apk
查看是否签名,如果已经签名会打印 "jar verified".
jarsigner -verify -verbose -certs app_signed.apk
查看签名详细信息。
apk优化
通过zipalign工具进行优化apk(android自带的工具,./build/tools/zipalign)
zipalign -v 4 app_signed.apk androidres.apk 对apk优化
zipalign -c -v 4 androidres.apk 查看apk是否经过优化
ant 自动化打包工具
在 ant release 的时候,会自动进行 编译,混淆,打包,签名,和优化操作。其实现过程如下:
在${sdk.dir}/tools/ant/build.xml 查找 release target 源码如下:
<target name="release"
depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
description="Builds the application in release mode.">
</target>
代码混淆规则:
如果在project.properties中配置了proguard.config=proguard.cfg,release的时候会自动进行代码混淆。在${sdk.dir}/tools/ant/build.xml可以找到相应的target。
<target name="-release-obfuscation-check">
<echo level="info">proguard.config is ${proguard.config}</echo>
<condition property="proguard.enabled"
value="true" else="false">
<and>
<isset property="build.is.mode.release"
/>
<isset property="proguard.config"
/>
</and>
</condition>
<if condition="${proguard.enabled}">
<then>
<echo level="info">Proguard.config
is enabled</echo>
<!-- Secondary dx input (jar files)
is empty since all the
jar files will be in the obfuscated
jar -->
<path id="out.dex.jar.input.ref" />
</then>
</if>
</target>
proguard.enabled的依据就是在release模式下,并且设置proguard.config这个属性
签名规则:签名过程中需要检查keystore和密码
<target name="-release-sign" if="has.keystore"
>
<!-- only create apk if *not* a library project -->
<do-only-if-not-library elseText="Library project: do not create
apk..." >
<sequential>
<property name="out.unaligned.file" location="${out.absolute.dir}/${ant.project.name}-release-unaligned.apk"
/>
<!-- Signs the APK -->
<echo level="info">Signing final apk...</echo>
<signapk
input="${out.packaged.file}"
output="${out.unaligned.file}"
keystore="${key.store}"
storepass="${key.store.password}"
alias="${key.alias}"
keypass="${key.alias.password}"/>
<!-- Zip aligns the APK -->
<zipalign-helper
in.package="${out.unaligned.file}"
out.package="${out.final.file}" />
<echo level="info">Release Package: ${out.final.file}</echo>
</sequential>
</do-only-if-not-library>
<record-build-info />
</target>
自定义打包规则:
在 build.xml 中导入自定义的打包规则的文件,
<import file="custom_rules.xml" optional="true" />
然后
可根据 release中的规则和顺序(depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"),自定义自己的规则。
在custom_rules.xml中
重新实现这些字段对应的规则方法。一般都在最后一项“-post-bulid”中完成。
如xxxxx项目中,在编译之前先检查libs库中的.so文件是否一致
和 签名采用自己的签名服务器去做等。实现代码如下:
<taskdef
name="SoChecker"
classname="com.netease.apkchecker.AllSoChecker"
classpath="apkchecker.jar" />
<target name="-post-build" depends="custom_sign,protect" >
<SoChecker apkPath="${out.final.file}" />
</target>
相关文章推荐
- Android:如何设置底部控件view随着软键盘的弹出而上移
- 编译安卓源码问题汇集
- Android L+ Theme 与 Toolbar 实例
- android屏幕适配官方总结
- 史上最详细的Android Studio系列教程四--Gradle基础
- Service 与 IntentService 的区别
- ffmpeg android so库使用
- 一个Demo学会用Android兼容包新控件
- Android 补间动画原理
- Android 关闭多个视图Intent.FLAG_ACTIVITY_CLEAR_TOP用法
- 我的第一个Android项目--------机房管理与学生信息系统的Android端开发
- android 仿天猫商品详情界面滑动效果
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-l
- android sdk国内快速更新下载
- Qt 在 android 下跑 注意事项
- android数据存储
- Android6.0版本和API level对应关系
- 用代码敲一番浪漫,Android开发音乐播放器
- Android 杂谈
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案