Android 混淆打包 ant
2014-12-11 00:00
295 查看
摘要: Android 混淆打包 Apache Ant
为什么要写,因为真的能用到,并且如果用的时候不会,还要查很多,第一次估计要搞几天(2天,可能我比较笨吧)。写出来分享一下,其实主要是记录一下,方便以后查阅,当然更希望能帮助到一些需要的人。
ant打包好处有什么
在eclipse中当我们的android项目需要打包出来的时候,往往是手动打包,如果有签名文件则需要输密码,选择输出目录等等操作,很麻烦。打包一个apk还好,当需要打包多个apk的时候,比如发布应用时需要打包各个平台的渠道包,几十上百个渠道号,一旦有改动或者版本升级时需要重新打包的时候,手动打包就不是很好的方式了。这时候可以用ant自动打包。
什么是渠道号
android开发后,将项目进行打包,生成apk,这个apk文件可以放到不同的应用市场,如360,应用宝,豌豆荚等。那当发布到这些应用市场上之后,怎么统计哪个市场的下载量比较多,哪个市场的推广效果比较好呢?这就需要在开发中植入不同的渠道号,对应不同的渠道号,打包生成不同的apk,然后将它们放到不同的市场上。这样就可以达到统计不同市场的效果了
下载ANT
百度“ant”,到Apache ant 官网,download。然后下载解压到你的磁盘中。
然后在环境变量中配置ant的路径(在cmd中可以使用ant命令,这个就不说了)。
还有就是还要在环境变量中配置好Android SDK的路径(可以使用adb,andriod等命令就对了,这个也不需要说了,相信大家都已经配置好了)
ant配置好之后在cmd里面输入ant
Buildfile: build.xml does not exist!
Build failed,说明配置完成。
ANT打包
进入自己的工程目录,执行命令:“android update project -p ./ ”参数p表示路径, ./表示当前路径
执行结果如下
Updated local.properties
No project name specified, using Activity name 'MainActivity'.
If you wish to change it, edit the first line of build.xml.
Added file E:\E\eoeandroid\MyDialog\build.xml
Updated file E:\E\eoeandroid\MyDialog\proguard-project.txt
It seems that there are sub-projects. If you want to update them
please use the --subprojects parameter.
在eclipse中刷新项目,可以看到多了以下两个文件
build.xml如下
然后将生成的android.keystore拷贝到工程根目录地下就行了。
之后,运行上面的命令吧(ant buildchannels)
关于遇到的问题请见我另一篇博文: Android签名问题,jarsigner的问题
OK,这样问题应该就解决了。
关于build.xml custome_rules.xml的语法
这就不说,这个我也是现学现卖,学了一下,也是稀里糊涂,只能说现在看懂了。
这个网上有很多资料。
参考资料:
Android打包混淆实战总结:http://www.eoeandroid.com/thread-538246-1-1.html
简单的ant打包,修改渠道号:http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html
Android打包流程:http://www.cnblogs.com/0616--ataozhijia/p/3732370.html
Android打包官网:http://developer.android.com/tools/building/index.html
Android build.xml编写:http://blog.csdn.net/jariwsz/article/details/6728337(这一篇写的很好)
(貌似混淆的东西还没加,之后再说吧)
为什么要写,因为真的能用到,并且如果用的时候不会,还要查很多,第一次估计要搞几天(2天,可能我比较笨吧)。写出来分享一下,其实主要是记录一下,方便以后查阅,当然更希望能帮助到一些需要的人。
ant打包好处有什么
在eclipse中当我们的android项目需要打包出来的时候,往往是手动打包,如果有签名文件则需要输密码,选择输出目录等等操作,很麻烦。打包一个apk还好,当需要打包多个apk的时候,比如发布应用时需要打包各个平台的渠道包,几十上百个渠道号,一旦有改动或者版本升级时需要重新打包的时候,手动打包就不是很好的方式了。这时候可以用ant自动打包。
什么是渠道号
android开发后,将项目进行打包,生成apk,这个apk文件可以放到不同的应用市场,如360,应用宝,豌豆荚等。那当发布到这些应用市场上之后,怎么统计哪个市场的下载量比较多,哪个市场的推广效果比较好呢?这就需要在开发中植入不同的渠道号,对应不同的渠道号,打包生成不同的apk,然后将它们放到不同的市场上。这样就可以达到统计不同市场的效果了
下载ANT
百度“ant”,到Apache ant 官网,download。然后下载解压到你的磁盘中。
然后在环境变量中配置ant的路径(在cmd中可以使用ant命令,这个就不说了)。
还有就是还要在环境变量中配置好Android SDK的路径(可以使用adb,andriod等命令就对了,这个也不需要说了,相信大家都已经配置好了)
ant配置好之后在cmd里面输入ant
Buildfile: build.xml does not exist!
Build failed,说明配置完成。
ANT打包
进入自己的工程目录,执行命令:“android update project -p ./ ”参数p表示路径, ./表示当前路径
执行结果如下
Updated local.properties
No project name specified, using Activity name 'MainActivity'.
If you wish to change it, edit the first line of build.xml.
Added file E:\E\eoeandroid\MyDialog\build.xml
Updated file E:\E\eoeandroid\MyDialog\proguard-project.txt
It seems that there are sub-projects. If you want to update them
please use the --subprojects parameter.
在eclipse中刷新项目,可以看到多了以下两个文件
build.xml如下
<?xml version="1.0" encoding="UTF-8"?> <project name="MainActivity" default="help"> <property file="local.properties" /> <property file="ant.properties" /> <property environment="env" /> <condition property="sdk.dir" value="${env.ANDROID_HOME}"> <isset property="env.ANDROID_HOME" /> </condition> <loadproperties srcFile="project.properties" /> <!-- quick check on sdk.dir --> <fail message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." unless="sdk.dir" /> <import file="custom_rules.xml" optional="true" /> <!-- 这个很重要 下面讲 --> <!-- version-tag: 1 --> <import file="${sdk.dir}/tools/ant/build.xml" /> </project>custom_rules.xml如下
<?xml version="1.0" encoding="UTF-8"?> <project name="" > <!-- change this !!! set ANDROID_HOME env PATH to SDK HOme --> <property name="keystore" value="android.keystore" /> <property name="keystore.password" value="your password" /> <property name="key.alias" value="android.keystore" /><!-- 这里折磨了我很久 --> <property name="key.password" value="your password" /> <!-- //////////////////////////////////////////////////////////////////////////////////////// --> <target name="mytest" depends="release" > <echo> signing the unsigned apk to final product apk ... </echo> </target> <!-- build channel macro --> <macrodef name="bc" > <!-- must set channel.name param --> <attribute name="channelName" /> <sequential> <echo message="*** CHANNEL NAME: @{channelName}" /> <!-- replace channel in AndroidManifest.xml --> <replaceregexp byline="true" file="AndroidManifest.xml" match="U0(\d)+" replace="@{channelName}" /> <!-- build apk --> <antcall target="clean" /> <antcall target="release" /> <!-- sign apk --> <sign-release /> <zipalign-release /> <mkdir dir="channels/@{channelName}" /> <move file="bin/${ant.project.name}-release-zipalign.apk" todir="channels/@{channelName}/" /> </sequential> </macrodef> <macrodef name="sign-release" > <sequential> <echo message="signing the unsigned apk to final product apk bin/${ant.project.name}-release-unsigned.apk" /> <echo message="jarsigner -keystore ${keystore} -storepass ${keystore.password} -keypass ${key.password} -signedjar bin/${ant.project.name}-release.apk bin/${ant.project.name}-release-unsigned.apk ${key.alias} " /> <exec executable="jarsigner" > <arg value="-keystore" /> <arg value="${keystore}" /> <arg value="-storepass" /> <arg value="${keystore.password}" /> <!-- 验证密钥完整性的口令,创建时建立的 --> <arg value="-keypass" /> <arg value="${key.password}" /> <!-- 专用密钥的口令,就是key密码 --> <arg value="-signedjar" /> <arg value="bin/${ant.project.name}-release.apk" /> <!-- 输出 --> <arg value="bin/${ant.project.name}-release-unsigned.apk" /> <!-- 未签名的apk --> <arg value="${key.alias}" /> <!-- 别名,创建时建立的 --> </exec> </sequential> </macrodef> <macrodef name="zipalign-release" > <sequential> <echo message="zipalign the signed apk" /> <exec executable="${sdk.dir}/tools/zipalign" > <arg value="-v" /> <arg value="4" /> <arg value="bin/${ant.project.name}-release.apk" /> <!-- signed apk --> <arg value="bin/${ant.project.name}-release-zipalign.apk" /> <!-- zipalign output --> </exec> </sequential> </macrodef> <target name="buildchannels" > <bc channelName="U068"/> </target> </project>然后在cmd中输入命令
ant buildchannels哦对了,再此之前,如果你要生成release版本的, 要准备好你的key(keystore),关于生成keystore的方法,详情请见我的另一篇博文:Android生成keystore方法。
然后将生成的android.keystore拷贝到工程根目录地下就行了。
之后,运行上面的命令吧(ant buildchannels)
关于遇到的问题请见我另一篇博文: Android签名问题,jarsigner的问题
OK,这样问题应该就解决了。
关于build.xml custome_rules.xml的语法
这就不说,这个我也是现学现卖,学了一下,也是稀里糊涂,只能说现在看懂了。
这个网上有很多资料。
参考资料:
Android打包混淆实战总结:http://www.eoeandroid.com/thread-538246-1-1.html
简单的ant打包,修改渠道号:http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html
Android打包流程:http://www.cnblogs.com/0616--ataozhijia/p/3732370.html
Android打包官网:http://developer.android.com/tools/building/index.html
Android build.xml编写:http://blog.csdn.net/jariwsz/article/details/6728337(这一篇写的很好)
(貌似混淆的东西还没加,之后再说吧)
相关文章推荐
- android ant 最简单的打包签名,混淆方法
- android ant多渠道混淆打包
- android ant 最简单的打包签名,混淆方法
- android开发使用SDK与ANT实现自动打包(混淆、签名)
- 用ant实现自动打包android(二) -- android代码混淆
- Android中使用Ant打包(混淆打包)
- android工程利用ant,antenna和proguard预编译混淆打包的方法
- android 混淆和android ant打包
- Android 自动化发布—采用Ant打包的完美实现:编译、合并、签名、混淆、优化、自动运行
- android开发之Ant多渠到混淆打包
- Ant android各渠道批量打包混淆
- android ant 最简单的打包签名,混淆方法
- android使用ANT打包,签名,混淆
- android ant 打包全过程 包含library,so,jar,混淆,签名
- android ant 最简单的打包签名,混淆方法
- android ant多渠道混淆打包
- android 应用 Ant脚本自动编译、打包、代码混淆、签名、安装等
- android ant多渠道混淆打包
- ant 实现批量打包android应用
- 在Eclipse里调用ant执行编译、打包、混淆