ant指令碼實現的Android自動編譯
最近用ant指令碼實現的Android自動編譯,已測試通過!
<?xmlversion="1.0" encoding="UTF-8"?>
<!--
1、拷貝當前專案到臨時目錄
2、修改 AndroidManifest.xml包名
3、生成新的R檔案
4、編譯
5、生成dex檔案
6、打包資原始檔
7、APK打包
-->
<project name="build"default="packageAPK" basedir=".">
<property name="sdk.dir"location="D:/environment/android-sdk_r20.0.3-windows" />
<propertyname="project_org.dir" value="D:/workspace/AutomaticCoding"/>
<propertyname="old_package_name" value="com.oldproject.test" />
<propertyname="new_package_name" value="com.newproject.test" />
<propertyname="sdk.platformtools" value="${sdk.dir}/platform-tools"/>
<property name="sdk.tools"value="${sdk.dir}/tools" />
<property name="aapt"value="${sdk.platformtools}/aapt.exe" />
<property name="adb"value="${sdk.platformtools}/adb.exe" />
<property name="dx"value="${sdk.platformtools}/dx.bat" />
<property name="apkbuilder"value="${sdk.tools}/apkbuilder.bat" />
<property name="android.jar"value="${sdk.dir}/platforms/android-14/android.jar" />
<property name="build.dir"value="${project_org.dir}/build" />
<property name="project.dir"value="${project_org.dir}/temp" />
<property name="classes.dir"value="${project.dir}/bin/classes" />
<propertyname="buildtemp.dir" value="${project.dir}/build" />
<property name="src.dir"value="${project.dir}/src" />
<property name="res.dir"value="${project.dir}/res" />
<property name="gen.dir"value="${project.dir}/gen" />
<property name="asset.dir"value="${project.dir}/assets" />
<!-- 設定路徑和初始化環境-->
<pathid="android.antlibs">
<pathelementpath="${sdk.dir}/tools/lib/anttasks.jar"/>
<pathelementpath="${sdk.dir}/tools/lib/sdklib.jar"/>
<pathelementpath="${sdk.dir}/tools/lib/androidprefs.jar"/>
</path>
<!--android 環境的建立-->
<!-- <taskdefname="setup" classname="com.android.ant.SetupTask"classpathref="android.antlibs"/> -->
<!-- 初始化-->
<targetname="init">
<deletedir="${build.dir}"></delete>
<mkdirdir="${build.dir}"/>
<deletedir="${project.dir}"></delete>
<mkdirdir="${project.dir}"/>
<copytodir="${project.dir}">
<filesetdir="${project_org.dir}" includes="**/*"/>
</copy>
<!--替換包名打包不同應用-->
<replaceregexp flags="g"encoding="UTF-8" byline="true">
<regexppattern="package(.*)${old_package_name}"/>
<substitutionexpression="package="${new_package_name}"/>
<fileset dir="${project.dir}"includes="AndroidManifest.xml"/>
</replaceregexp>
<replaceregexp flags="g"encoding="UTF-8" byline="true">
<regexppattern="authorities(.*)${old_package_name}"/>
<substitutionexpression="authorities="${new_package_name}"/>
<fileset dir="${project.dir}"includes="AndroidManifest.xml"/>
</replaceregexp>
<replaceregexp flags="g"encoding="UTF-8" byline="true">
<regexppattern="import(.*)${old_package_name}.R\b"/>
<substitution expression="import ${new_package_name}.R"/>
<fileset dir="${project.dir}/src" includes="**/*.java"/>
</replaceregexp>
</target>
<!--生成R.java檔案${sdk.dir}\platform-tools\aapt.exe-->
<targetname="genRJava">
<execexecutable="${aapt}" failonerror="true">
<arg value="package"/>
<arg value="-m"/>
<arg value="-J"/>
<arg value="${project.dir}/gen"/>
<arg value="-M"/>
<arg value="${project.dir}/AndroidManifest.xml"/>
<arg value="-S"/>
<arg value="${res.dir}"/>
<arg value="-I"/>
<arg value="${android.jar}"/>
</exec>
</target>
<!-- 專案編譯-->
<targetname="compile" >
<javacencoding="UTF-8" target="1.5" debug="true"extdirs=""
srcdir="${gen.dir};${src.dir}"
destdir="${classes.dir}"bootclasspath="${android.jar}">
<classpath>
<fileset dir="${project.dir}/libs"includes="*.jar">
</fileset>
<fileset dir="${sdk.dir}/tools/support" includes="*.jar">
</fileset>
</classpath>
</javac>
</target>
<!-- 生成dex檔案${sdk.dir}\platform-tools\dx.bat -->
<target name="dex">
<applyexecutable="${dx}" failonerror="true"parallel="true">
<arg value="--dex"/>
<arg value="--output=${buildtemp.dir}/classes.dex"/>
<arg path="${classes.dir}"/>
<fileset dir="${project.dir}/libs" includes="*.jar"/>
</apply>
</target>
<!-- 打包資原始檔${sdk.dir}\platform-tools\aapt.exe -->
<targetname="packageRes">
<execexecutable="${aapt}" failonerror="true">
<arg value="package"/>
<arg value="-f"/>
<arg value="-M"/>
<arg value="${project.dir}/AndroidManifest.xml"/>
<arg value="-S"/>
<arg value="${res.dir}"/>
<arg value="-A"/>
<arg value="${asset.dir}"/>
<arg value="-I"/>
<arg value="${android.jar}"/>
<arg value="-F"/>
<arg value="${buildtemp.dir}/resources.ap_"/>
</exec>
</target>
<!-- 打包Apk-->
<targetname="packageAPK"depends="init,genRJava,compile,dex,packageRes">
<!-- 打包-->
<execexecutable="${apkbuilder}" failonerror="true">
<arg value="${buildtemp.dir}/unsigntest.apk"/>
<arg value="-u"/>
<arg value="-z"/>
<arg value="${buildtemp.dir}/resources.ap_"/>
<arg value="-f"/>
<arg value="${buildtemp.dir}/classes.dex"/>
<arg value="-rf"/>
<arg value="${src.dir}"/>
<arg value="-rj"/>
<arg value="${project.dir}/libs"/>
</exec>
<!-- 簽名-->
<exec executable="jarsigner">
<arg value="-keystore" />
<arg value="test.keystore" />
<arg value="-storepass" />
<arg value="123456" />
<arg value="-keypass" />
<arg value="123456" />
<arg value="-signedjar" />
<arg value="${buildtemp.dir}/newproject.apk" />
<arg value="${buildtemp.dir}/unsigntest.apk" />
<arg value="test.keystore" />
</exec>
</target>
</project>
解決Couldn'tload XXX: findLibrary returned null載入.so檔案失敗的問題
只要將上面程式碼
<arg value="-rj"/>
<argvalue="${project.dir}/libs"/>
改為
<arg value="-nf"/> <!--這個引數就是要求打入so檔案,後面的引數是具體路徑-->
<argvalue="${project.dir}/libs"/>
就可以了
相關文章
- Window下采用ant 指令碼構建Android自動化編譯指令碼Android編譯
- 通過ant指令碼編譯打包android工程指令碼編譯Android
- 學習Ant編譯指令碼編譯指令碼
- Android使用Ant自動編譯簽名打包詳解Android編譯
- Ant 編譯、打包 build.xml 指令碼模板編譯UIXML指令碼
- Android自動打包、簽名、優化、上傳ANT指令碼Android優化指令碼
- 分享一個自動編譯,打包,簽名 android apk 的小指令碼編譯AndroidAPK指令碼
- Android 自動編譯、打包生成apk檔案 3 - 使用SDK Ant方式Android編譯APK
- Android ant自動打包指令碼:自動替換友盟渠道、版本號、包名Android指令碼
- android使用ant編譯(rem)Android編譯REM
- 解剖Nginx·自動指令碼篇(5)編譯器相關主指令碼Nginx指令碼編譯
- 使用 Fastlane 實現 iOS 跟 Android 自動打包指令碼ASTiOSAndroid指令碼
- 實現指令碼自動部署docker指令碼Docker
- Oracle自動備份指令碼的實現Oracle指令碼
- dataguard switchover的自動化指令碼實現指令碼
- 精讀Nginx·自動指令碼篇(5)編譯器相關主指令碼Nginx指令碼編譯
- Gitee Webhook 實現自動拉取程式碼並編譯程式碼GiteeWebHook編譯
- 透過 GitHub Actions 實現程式碼的自動編譯和釋出Github編譯
- shell,ant指令碼實現自動資料泵(exp.expdp)匯出匯入資料指令碼
- 使用shell指令碼自動修改Xcode工程編譯版本號指令碼XCode編譯
- python實現自動搶課指令碼Python指令碼
- 解剖Nginx·自動指令碼篇(6)編譯器名稱變數指令碼 auto/cc/nameNginx指令碼編譯變數
- 自動化(YUM/編譯)安裝PHP(5.3/5.5/7.0/7.1)指令碼編譯PHP指令碼
- Vue | 指令實現自動翻譯填充英文名功能Vue
- flyway實現java 自動升級SQL指令碼JavaSQL指令碼
- shell指令碼實現自動生成awr報告指令碼
- Android筆記之:App自動化之使用Ant編譯專案多渠道打包的使用詳解Android筆記APP編譯
- rsync的自動指令碼實現方案(非rsyncd服務)指令碼
- 用Ant實現Java專案的自動構建和部署Java
- 編譯FFMPEG原始碼的指令碼編寫案例編譯原始碼指令碼
- sql server編寫archive通用模板指令碼實現自動分批刪除資料SQLServerHive指令碼
- 利用Python實現自動掃雷小指令碼Python指令碼
- 實現MySQL表結構自動分割槽指令碼MySql指令碼
- 指令碼實現U盤自動掛載(linux)指令碼Linux
- SHELL指令碼實現Oracle自啟動與關閉指令碼Oracle
- Android 配置 Ant 指令碼之程式碼混淆和優化Android指令碼優化
- linux透過shell指令碼實現ssh互動式自動化Linux指令碼
- Linux使用Shell指令碼實現ftp的自動上傳下載Linux指令碼FTP