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=&quot;${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=&quot;${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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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}" failοnerrοr="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"/>

就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值