Android 混淆打包 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中刷新项目,可以看到多了以下两个文件

Android 混淆打包 ant

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,签名,打包,混淆)