androidant使用
1. android ant混淆编译打包生成jar文件,如何将jni生成的lib**.so库文件同时打包
在混淆配置文件中添加这句
-keepclasseswithmembernames class * {
native <methods>;
}
2. android多个工程打包的话能用ant吗
使用Ant批量打包
ant打包其实不难,看里面的错误注释,然后查找就可以
1.配置java的环境变量
(参考http://jingyan..com/article/f96699bb8b38e0894e3c1bef.html),
很多Java程序员由于使用Eclipse不配置Java环境变量也能正常运行代码。但是如果想使用Ant命令批量打包本步骤必不可少。
2. 下载Ant(这里的Ant不是eclipse和android SDk里面自带的ant)
3. 解压Ant并配置环境变量
a) 解压Ant,比如解压到D:\ant
b) 我的电脑->属性->高级->环境变量
c) 系统变量新建ANT_HOME,变量值为d:\ant
d) 系统变雀皮量新建或修改PATH:将%ANT_HOME%\bin;%ANT_HOME%\lib添加到环境变量的PATH中 (注意以上
路径均用反斜杠)
4. 验证ant配置是否正确
在控制台输入Cmd 回车, ant 回车,如果出现:
Buildfile: build.xml does not exist!
Build failed
恭喜你已经ant配置成功!!
Ant批量打包的基本思想是,每次打包后自动替换渠道号,然后再次打包从而实现多渠道打包的目的。
但是Ant不支持循环,怎样循环打包? 扩展包Ant-contrib能轻松解决这个问题.可以翻墙的同学可以到http://ant-contrib.sourceforge.net/自行下载,下载则亩后直接把ant-contrib-1.0b3.jar放到Ant的lib文件夹即可.
5. 编写build.xml
将以下带有颜色孙岁森的字体(包括路径,项目名称)都改成正确的名称
<?xml version="1.0" encoding="UTF-8"?>
<project name="ThumbPlay" default="help">
<!-- The local.properties file is created and updated by the 'android' tool.
It contains the path to the SDK. It should *NOT* be checked into
Version Control Systems. -->
<property file="local.properties" />
<!-- The ant.properties file can be created by you. It is only edited by the
'android' tool to add properties to it.
This is the place to change some Ant specific build properties.
Here are some properties you may want to change/update:
source.dir
The name of the source directory. Default is 'src'.
out.dir
The name of the output directory. Default is 'bin'.
For other overridable properties, look at the beginning of the rules
files in the SDK, at tools/ant/build.xml
Properties related to the SDK location or the project target should
be updated using the 'android' tool with the 'update' action.
This file is an integral part of the build system for your
application and should be checked into Version Control Systems.
-->
<property file="ant.properties" />
<!-- The project.properties file is created and updated by the 'android'
tool, as well as ADT.
This contains project specific properties such as project target, and library
dependencies. Lower level build properties are stored in ant.properties
(or in .classpath for Eclipse projects).
This file is an integral part of the build system for your
application and should be checked into Version Control Systems. -->
<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 an env var"
unless="sdk.dir"
/>
<!-- extension targets. Uncomment the ones where you want to do custom work
in between standard targets -->
<!--
<target name="-pre-build">
</target>
<target name="-pre-compile">
</target>
<target name="-post-compile">
</target>
-->
<!-- Import the actual build file.
To customize existing targets, there are two options:
- Customize only one target:
- /paste the target into this file, *before* the
<import> task.
- customize it to your needs.
- Customize the whole content of build.xml
- /paste the content of the rules files (minus the top node)
into this file, replacing the <import> task.
- customize to your needs.
***********************
****** IMPORTANT ******
***********************
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
in order to avoid having your file be overridden by tools such as "android update project"
-->
<!-- version-tag: 1 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="D:/androidDev/batch-package-tool/ant1.8.3/lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<import file="${sdk.dir}/tools/ant/build.xml" />
<target name="deploy">
<foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">
</foreach>
</target>
<target name="modify_manifest">
<!--<replaceregexp file="AndroidManifest.xml" encoding="utf-8" match="android:value="(.*)"" replace=""/>-->
<replaceregexp flags="g" byline="false">
<regexp pattern="android:name="UMENG_CHANNEL" android:value="(.*)"" />
<substitution expression="android:name="UMENG_CHANNEL" android:value="${channel}"" />
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<!--<property name="out.release.file" value="${out.absolute.dir}/${channel}.apk"/>-->
<antcall target="release"/>
< tofile="${gos.path}/ThumbPlay_${channel}.apk">
<fileset dir="${out.absolute.dir}/" includes="ThumbPlay-release.apk" />
</>
<delete includeEmptyDirs="true">
<fileset dir="${out.absolute.dir}" includes="**/*"/>
</delete>
<echo message="==========================="/>
</target>
</project>
Windows环境下:
6. 配置local.properties
sdk.dir=D:\\androidDev\\android-sdk 改成你的SDK所在的目录,注意转义字符
Mac环境下:
6. 配置local.properties
sdk.dir=/opt/adt-bundle-mac/sdk 改成你的SDK所在的目录
7. 配置ant.properties
# the config file for batch package.
application.package=com.leyou.thumb (你的apk文件的包名)
ant.project.name=ThumbPlay (你的apk文件的工程名)
java.encoding=utf-8
out.absolute.dir=C:/compile
gos.path=Z:/app-version/test (打好的渠道包要放到的目的位置)
key.store=D:/androidApk/thumbplay/thumbplay.keystore (keystore文件路径)
key.store.password=wushenshiji999 (keystore文件路径)
key.alias=mugame (keystore文件别名)
key.alias.password=wushenshiji999 (keystore文件别名密码)
app_version=1.0.4 (要打的渠道包的版本名称)
market_channels=guanwang,shuihu,wushen,shenhua,huawei (渠道名称,要以逗号分隔,必须在一行内)
8. 最后一步,修改AndroidManifest.xml文件:
成功:Android批量打包教程
以上这一行必须在同一行内,决不能换行,这是由于在build.xml做了如下限定
成功:Android批量打包教程
9.生成渠道包
a)进入工程根目录,我的为:D:\apps\workspace\ThumbPlay
注意这里必须要去工程根目录,因为Ant命令运行需要找到工程根目录下的build.xml
b)cmd输入命令:ant deploy 第一次运行或许需要的时间要长些,我的为大约2分50秒
若控制台最后出现Build Success,说明打包成功
若控制台最后出现Build Failed,查看详细信息,找出错误所在,修改它,然后重新运行命令:ant deploy
3. Ant打包功能求解!BUILD FAILED
你看看后面是不是有这样的错误:
BUILD FAILED
D:\android\sdk\tools\ant\build.xml:649: The following error occurred while executing this line:
D:\android\sdk\tools\ant\build.xml:694: Execute failed: java.io.IOException: Cannot run program "D:\android\sdk\build-tools\23.0.0_rc2\bin\aapt.exe" (in directory "D:\Cocos\HelloCocos\proj.android"): CreateProcess error=2, 系统找不到指定的文件。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
....
看提示:系统找不到指定的文件。是哪个文件呢?是这个:D:\android\sdk\build-tools\23.0.0_rc2\bin\aapt.exe,你去你的sdk目录下看看是否有这个文件夹和文件bin\aapt.exe;没有的话自己新建一个,然后将aapt.exe和zipalign.exe复制进去,这两个文件在你D:\android\sdk\build-tools\23.0.0_rc2目录下。然后在编译。我的错误就是这样解决的。不知道能否解决你的问题。个人经验,仅供参考。
4. 用 ant 打包 android 一直出现 class.dex does not exists 急急急!!在线等
用ant在命令行创建以一个android项目 命令是 android create project -k com.test.ant -n TestAnt -a MainActivity -t 2 -p E:\JazzyYang\TestAnt
然后进入该目录下 敲ant debug
然后
BUILD FAILED
E:\JazzyYang\androidsdk\android-sdk-windows\tools\ant\ant_rules_r3.xml:395: The
following error occurred while executing this line:
E:\JazzyYang\androidsdk\android-sdk-windows\tools\ant\ant_rules_r3.xml:209: com.
android.sdklib.build.ApkCreationException: E:\JazzyYang\Android_Work\bin\classes
.dex does not exist
5. android 使用ant自动打包,某些Jar包包含assets目录存放资源文件
<!-- 将资源文件放进输出目录 -->
<target name="package-res-and-assets">
<echo>Packaging resources and assets...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="${manifest-xml}" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
6. android studio能直接运行ant脚本吗
1、生成R.java
2、编译*.java
3、生成classes.dex
4、将assets、res打包
5、生成未签名的apk
6、将apk签名
基于这些步骤,我们来编写ant脚本。
1、生成R.java
<target name="init">
<echo>Initialize...</echo>
<delete dir="${bin}">
<mkdir dir="${bin}">
</mkdir></delete></target>
<target name="gen-R" depends="init">
<echo>
Generating R.java from the resources...
1.aapt package -f -m -J gen -S res -I D:/android-sdk-windows/platforms/android-16/android.jar -M AndroidManifest.xml
</echo>
<exec executable="${tools.aapt}" failonerror="true">
</arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></exec>
</target>
注:
(1)、target中的name是该target的名字,该名字会在其他target的depends中调用,也可在project的default中使用,也可在指定ant脚本时调用。
(2)、depends指定的是该target执行前需要执行的target。
(3)、arg中的参数与《Android打包之bat脚本打包》的1_genR的bat脚本参数相对应。
(4)、${XXX}是对变量的引用,这些变量定义到property属性中。下面是相关的代码。
<property name="sdk-folder" value="D:\android-sdk-windows">
<property name="platform-folder" value="${sdk-folder}\platforms\android-17">
<property name="platform-tools-folder" value="${sdk-folder}\platform-tools">
<property name="jdk-folder" value="D:\Program Files (x86)\Java\jdk1.6.0_45"><property name="android-jar" value="${platform-folder}\android.jar">
<property name="tools.aapt" value="${platform-tools-folder}\aapt.exe">
<property name="tools.javac" value="${jdk-folder}\bin\javac.exe">
<property name="tools.dx" value="${platform-tools-folder}\dx.bat">
<property name="tools.apkbuilder" value="${sdk-folder}\tools\apkbuilder.bat">
<property name="tools.jarsigner" value="${jdk-folder}\bin\jarsigner.exe"><property name="project-dir" value="G:\Code\Android\Workspace\AntDemo">
<property name="res" value="${project-dir}\res">
<property name="gen" value="${project-dir}\gen">
<property name="src" value="${project-dir}\src">
<property name="bin" value="${project-dir}\bin">
<property name="assets" value="${project-dir}\assets"><property name="manifest" value="${project-dir}\AndroidManifest.xml">
<property name="java-file-gen" value="${gen}\com\example\antdemo\*.java">
<property name="java-file-src" value="${src}\com\example\antdemo\*.java">
<property name="dex-name" value="${bin}\classes.dex">
<property name="pakcage-temp-name" value="${bin}\${ant.project.name}">
<property name="unsigned-apk-name" value="${ant.project.name}_unsigned.apk">
<property name="unsigned-apk-path" value="${bin}\${unsigned-apk-name}">
<property name="signed-apk-name" value="${ant.project.name}.apk">
<property name="signed-apk-path" value="${bin}\${signed-apk-name}">
<property name="keystore-name" value="${project-dir}\my.keystore">
<property name="keystore-alias" value="ant_test">
</property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property></property>
注:
(1)、sdk-folder指定了android-sdk所在的目录。
(2)、jdk-folder指定的是jdk所在的目录。建议使用jdk1.6,jdk1.7可能会有问题。
(3)、tools中指定了所要用到的工具。
(4)、其他变量自行对应。
2、编译*.java
<target name="compile" depends="gen-R">
<echo>
Compile...
2.javac -target 1.6 -bootclasspath D:/android-sdk-windows/platforms/android-16/android.jar -d bin gen\com\example\antdemo\*.java src\com\example\antdemo\*.java
</echo>
<exec executable="${tools.javac}" failonerror="true">
</arg></arg></arg></arg></arg></arg></arg></arg></exec>
</target>
注:调用javac命令来编译,相关的参数与《Android打包之bat脚本打包》的2_compile.bat脚本相对应。
3、生成classes.dex
<target name="dex" depends="compile">
<echo>
Generate dex...
3.dx 两个短横dex 两个短横output=G:\Code\Android\Workspace\AntDemo\bin\classes.dex G:\Code\Android\Workspace\AntDemo\bin
</echo>
<exec executable="${tools.dx}" failonerror="true">
</arg></arg></arg></exec>
</target>
注:
(1)、两个短横表示的是--,因--在xml中属性特殊标记,所以使用文字来描述。
(2)、相关的参数与《Android打包之bat脚本打包》的3_dex.bat脚本相对应。
4、将assets、res打包
<target name="package" depends="dex">
<echo>
Package resource and assets...
4.aapt package -f -A assets -S res -I D:/android-sdk-windows/platforms/android-16/android.jar -M AndroidManifest.xml -F bin/AntDemo
</echo>
<exec executable="${tools.aapt}" failonerror="true">
</arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></exec>
</target>
注:相关的参数与《Android打包之bat脚本打包》的4_package.bat脚本相对应。
5、生成未签名的apk
<target name="build-unsigned-apk" depends="package">
<echo>
Build unsigned apk
5.apkbuilder G:\Code\Android\Workspace\AntDemo\bin\AntDemo_unsigned.apk -v -u -z G:\Code\Android\Workspace\AntDemo\bin\AntDemo -f G:\Code\Android\Workspace\AntDemo\bin\classes.dex -rf G:\Code\Android\Workspace\AntDemo\src
</echo>
<exec executable="${tools.apkbuilder}" failonerror="true">
</arg></arg></arg></arg></arg></arg></arg></arg></arg></exec>
</target>
注:相关的参数与《Android打包之bat脚本打包》的5_unsinged.bat脚本相对应。
6、将apk签名
<target name="sign-apk" depends="build-unsigned-apk">
<echo>
Sign apk
6.jarsigner -keystore G:\Code\Android\Workspace\AntDemo\build\my.keystore -storepass 123456 -keypass 123456 -signedjar G:\Code\Android\Workspace\AntDemo\bin\AntDemo_signed.apk G:\Code\Android\Workspace\AntDemo\bin\AntDemo_unsigned.apk ant_test
</echo>
<exec executable="${tools.jarsigner}" failonerror="true">
</arg></arg></arg></arg></arg></arg></arg></arg></arg></arg></exec>
</target>
注:相关的参数与《Android打包之bat脚本打包》的6_singed.bat脚本相对应。
7. android studio能直接运行ant脚本吗
一、Ant插件的安装
由于之前我安装过IntellijIdea,所以我就用一个比较偷懒的方式,直接从那儿复制插慧辩件过来啦:
然后,将这个文件夹复制到AndroidStudio里面的plugin目录下:
大功告成了,现前猜缺在可以直接在AndroidStudio中使用ant脚本了。
二、运行ant脚本
在Android项目下新建一个build.xml文件如下:
各个项目的路径和jar包路径之类的,改成自己的就可以兆启成功了
之前由于没有指定子工程的jar文件路径,编译javac的时候就会报下面这个错误:
Compile failed; see the compiler error output for details.
at org.apache.tools.ant.taskdefs.Javac.compile(Javac.Java:1150)
at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:912)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
指定后就编译成功了。
8. 如何用ANT同时打包多个渠道(android)
再写target,然后包括那些要发布的target