當前位置:首頁 » 安卓系統 » androidant使用

androidant使用

發布時間: 2023-05-24 01:30:07

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

熱點內容
c語言數字翻譯 發布:2025-02-12 14:45:54 瀏覽:497
暗區突圍為什麼顯示伺服器維修 發布:2025-02-12 14:45:53 瀏覽:247
翻譯分為匯編和編譯 發布:2025-02-12 14:29:12 瀏覽:233
什麼是新聞編譯 發布:2025-02-12 14:23:12 瀏覽:853
如何查看手機存儲 發布:2025-02-12 14:21:15 瀏覽:50
cacti自定義腳本 發布:2025-02-12 14:21:13 瀏覽:313
編譯安卓步驟 發布:2025-02-12 14:19:39 瀏覽:222
php把數組分組 發布:2025-02-12 14:19:37 瀏覽:280
linux部署weblogic 發布:2025-02-12 14:18:58 瀏覽:504
cs文件編譯python 發布:2025-02-12 14:02:39 瀏覽:531