android ant打包

Oct 22, 2015


1

1.1 对项目执行

android update project –target --path

或者

android update project -t -p

例如

android update project -t android-23 -p . (android版本23, 路径是当前目录).

1.2 对依赖项目执行

android update lib-project -t android-23 -p .

1.3 最后对项目执行

android update project -n name -t android-23 -p . –subprojects

name 是项目名字

2

上面的步骤导致项目生成2个文件, local.properties和build.xml, 每个依赖的项目也会生成这2个文件。

2.1

在项目根目录新建一个 ant.properties 文件.

下面是ant.properties的修改

如果需要修改编译使用到版本为java7,

java.source=7

java.target=7

如果需要加编译参数,

java.compilerargs=-Xlint:deprecation -Xlint:unchecked

(详细可以搜索build.xml中得javac标签)

2.2 添加签名设置

keytool -genkey -alias myalias -keyalg RSA -validity 20000 -keystore my.keystore

其中 myalias 是alias的名字,20000是有效时常20000天, my.keystore是keystore生成的文件名.

往ant.properties添加下面4行

key.store=my.keystore

key.alias=myalias

key.store.password=sanyun (可省)

key.alias.password=sanyun (可省)

后面不能有空格。

2.3 打包

在项目根目录下执行 ant release

3 可能出现的错误

invalid resource directory name: /Users/seven/Documents/workspace-v6.0/appcompat_v7/bin/res crunch

v7包是常见的依赖包,很容易出错, 直接删除即可

rm -r /Users/seven/Documents/workspace-v6.0/appcompat_v7/bin/res/crunch

ant clean

ant release

3.1 oom异常

找到 sdk/build-tools/target/dx 文件,打开修改 javaOpts即可

4 打多渠道包

下载 http://ant-contrib.sourceforge.net/

将下载的jar包放在 ant 的安装目录下

4.1 修改 local.properties 文件,加入

ant.dir=/usr/local/Cellar/ant/1.9.6 #ant的安装目录

target.dir=/Users/seven/Desktop/ViewPagerDemo #打包的存放目录

4.2 修改ant.properties 加入

market_channels=Wandoujia,360 #渠道列表,逗号分隔

app_name=ViewPagerDemo #app的名字

app_version=1.0 #app版本 (此时需要在target.dir下面创建一个名叫1.0的目录)。

4.3 修改 build.xml

下面加入

<!--  多渠道打包加入 -->
    <echo>${market_channels}</echo>  
    <echo>${app_version}</echo>  
    
    <!-- 支持循环执行 -->  
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >  
        <classpath>  
           <pathelement location="${ant.dir}/ant-contrib-1.0b3.jar" />  
        </classpath>  
    </taskdef>  
    
    <echo>Run ant-contrib-1.0b3.jar ok</echo>  
    
    <target name="deploy">   
        <foreach target="edit_and_build" list="${market_channels}" param="channel" delimiter=",">   
        </foreach>   
    </target>  
    
    <target name="edit_and_build">   
        <echo>Run '${channel}' apk</echo>  
        
		<replaceregexp
		    encoding="utf-8"
		    file="AndroidManifest.xml"
		    flags="s"
		    match='android:name="UMENG_CHANNEL".+android:value="([^"]+)"'
		    replace='android:name="UMENG_CHANNEL" android:value="${channel}"'/>
			
      	<property name="out.final.file"  location="${target.dir}/${app_version}/${app_name} V${app_version}(${channel}).apk" /> 
	    <antcall target="clean" />  
	    <antcall target="release" />  
     
    </target> 
     <!-- 多渠道打包结束 -->

4.4 打包

ant deploy