Android 自动化发布—采用Ant打包的完美实现:编译、合并、签名、混淆、优化、自动运行

Android中进行APK打包可以采用Eclipse、Ant命令另种方式完成,但是如果打包的APK过多、打包次数过于频繁,工作量是可想而知的,所以决定采用Ant进行打包。基于Ant的打包实现,如果纯手工编写Ant,编译起来可能更为繁琐,好在我们可以采用Android自带的打包配置进行定制化打包,不需要再通过编写复杂的build.xml配置完成,具体实现的步骤如下:
1、生成build.xml

android list target 查看当前sdk的版本列表
android update project -n ProjectName -t 1 -p ProjectPath

-n 对应的是项目名称
-t 就是我们之前查询的SDK版本对应的ID,大家根据自己的项目版本做出选择即可,我这个是android-19 所以用ID 1 .
-p 就是生成的路径
示例:android update project -n "项目名" -t 12 -p 项目路径
这样就在当前工程目录下生成了build.xml

2、配置local.properties,配置签名等信息,示例如下:

sdk.dir=D:\\android_4.0\\android-sdk-windows  //自动生成
key.store=../../jars/xxx.keystore
key.store.password=...
key.alias=xxxxy
key.alias.password=...

3、配置custom_rules.xml或在项目的build.xml中直接修改,重新定义-pre-compile这个target,在其中重新定义 project.all.jars.path 的值。
如果你的引用JAR包都在工程的libs目录下,可以忽略该步骤。
在该文件中进行配置第三方JAR包引用路径,相对或绝对路径都可以,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<project
    name="custom_rules"
    default="release" >
    <target name="-pre-compile" >
        <echo message="JARPATH=${toString:project.all.jars.path}" >
        </echo>
        <path id="ormlite.lib" >
            <path path="${toString:project.all.jars.path}" >
            </path>
            <pathelement location="E:\Projects\vis_code\apk\jars\a.jar" />
            <pathelement location="E:\Projects\vis_code\apk\jars\b.jar" />
        </path>


        <path id="project.all.jars.path" >
            <path refid="ormlite.lib" >
            </path>
        </path>
        <echo message="JARPATH=${toString:project.all.jars.path}" >
        </echo>
    </target>
</project>
4、启用代码混淆
(1)在project.properties中,启用优化配置。
proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt
(2)设定或默认使用target=android-数字
(3)修改库项目引用
android.library.reference.1=../.. /项目名      //自动生成
该配置的库项目在编译时会自动查找并进行编译
(4)在项目工程的proguard-project.txt中进行混淆配置

-dontskipnonpubliclibraryclassmembers

-libraryjars libs/android-support-v4.jar
-libraryjars ../../jars/BesTVMediaPlayer.jar          //相对或绝对路径都可以
-libraryjars ../../jars/BesTVOttFramework.jar
-libraryjars ../../jars/gson.jar

-ignorewarnings

-keep class android.support.v4.** { *; }
-keep public class * extends android.support.v4.**
-keep class com.bestv.ott.** { *; }
-keep class com.bestv.util.** { *; }
-keep class com.google.gson.** { *; }
-keep class com.bestv.framework.vod.BesTVJSInterface { *; }
-keep class com.bestv.framework.vod.BesTVAuth { *; }
-keep class com.bestv.framework.common.Logger { *; }
-keep class com.bestv.framework.vod.BesTVJSSystem { *; }
5、同样的,如果编译的项目引用多个库项目,则需要在各个库项目中进行如下相同操作
(1) 生成build.xml
(2) 同样配置custom_rules.xml
6、通过以上配置后,可进行如下命令打包

ant clean release 清理发布(要求输入签名)
ant clean debug debug模式(不要求手动输入签名,用的是debug签名)
ant debug install/installd/installr/installi/installt
ant release install
ant reinstall
ant uninstall

7、输入签名密码,完成打包

8、如果为DEBUG模式,则可通过以下方式进行自动运行的批处理实现

(1)DEBUG.BAT放置编译指令

cd /d %itempath%
ant clean debug install
exit

(2)ITEM.BAT放置和项目相关的运行处理

@echo off
SET itempath=E:\Projects\vis_code\apk\fapl\trunk
SET package=com.xxx
SET classname=com.xxx.LauncherActivity

call C:\Users\xu.jian\Desktop\Release\debug.bat
adb shell am start -n %package%/%classname%


这样就可以自动编译、自动运行APK,不需要在ECLIPSE、Android Studio中进行完成运行。

 

此外,在代码托管时,可对上述涉及到的相关文件进行管理,主要有:

1、project.properties
2、 proguard-project.txt
3、 local.properties
4、 custom_rules.xml
5、 build.xml


对于系统build.xml文件主要应用解析:

1、Overridable Properties 部分是可以在ant.properties、local.properties中进行覆盖
You can override these values in your build.xml or ant.properties. Overriding any other properties may result in broken build.
2、 Other Properties部分不可以覆盖定义
overriding these properties may break the build unless the whole file is updated
3、 manifest merger可以将多个库项目的manifest文件进行合并,避免多个库项目引用时,需要拷贝组件注册和权限
    <property name="manifestmerger.enabled" value="true" />
4、 android help 可以查看build中支持的target指令

对于其他的系统属性配置,如果在项目的build.xml中应用,可以直接$引入,如输入输出的目录信息等。



你可能感兴趣的:(java,android,apk,自动化,发布)