前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ant 打包安卓apk(2)-手写版

Ant 打包安卓apk(2)-手写版

作者头像
acc8226
发布2022-06-27 09:36:35
3820
发布2022-06-27 09:36:35
举报
文章被收录于专栏:叽叽西叽叽西

接着上文, 直接上 ant 脚本

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<project default="package resources" basedir=".">
  <description>
        安卓构建脚本
  </description>
  <property name="project-dir" location="."/>

  <property environment="env" />
  <!-- JAVA目录(获取操作系统环境变量JAVA_HOME的值) -->
  <property name="java_home" value="${env.JAVA_HOME}"/>
  <!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) -->
  <property name="sdk-folder" value="${env.ANDROID_HOME}" />
  <!-- SDK指定平台目录 -->
  <property name="sdk-platform-folder" value="${sdk-folder}/platforms/android-22"/>
  <!-- 指定平台对应的android.jar -->
  <property name="android-jar" value="${sdk-platform-folder}/android.jar" />
  <!-- SDK中tools目录 -->
  <property name="sdk-tools" value="${sdk-folder}/tools" />
  <!-- SDK中build_tools目录 -->
  <property name="build-tools" value="${sdk-folder}/build-tools/25.0.2" />
  <!-- SDK指定平台中tools目录 -->
  <property name="sdk-platform-tools" value="${sdk-platform-folder}/tools" />

  <!-- 使用到的命令(当前系统为mac) -->
  <property name="aapt" value="${build-tools}/aapt" />
  <property name="aidl" value="${build-tools}/aidl" />
  <property name="dx" value="${build-tools}/dx.bat" />
  <property name="zipalign" value="${build-tools}/zipalign" />
  <property name="apkbuilder" value="${sdk-tools}/apkbuilder" />
  <property name="jarsigner" value="${java_home}/bin/jarsigner" />

  <!-- 基本编译路径设置 可定义多个classpath-->
  <path id="compile.classpath">
    <fileset dir="libs">
      <include name="*.jar" />
    </fileset>
  </path>

  <target name="init">
    <!-- Create the build directory structure used by compile -->
    <mkdir dir="gen" />
    <mkdir dir="bin/classes" />
  </target>

  <target name="generate R" depends="init" description="Package the android resources得到R.java文件">
    <exec executable="${aapt}">
      <arg value="package" />
      <arg value="-f" />
      <arg value="-m" />
      <arg value="-M" />
      <arg value="AndroidManifest.xml" />
      <arg value="-I" />
      <arg value="${android-jar}" />
      <arg value="-S" />
      <arg value="res" />
      <arg value="-J" />
      <arg value="gen" />
      <!-- 覆盖资源 -->
      <arg value="--auto-add-overlay" />
    </exec>
  </target>

  <target name="compile javac" depends="generate R" description="Javac编译(包含src和gen目录)java文件">
    <javac encoding="utf-8" source="1.6" target="1.6" bootclasspath="${android-jar}" destdir="bin/classes" includeantruntime="false">
      <classpath refid="compile.classpath" />
      <src path="src" />
      <src path="gen" />
    </javac>
  </target>

  <target name="dx" depends="compile javac" description="打包class文件和jar包dx为classes.dex">
    <exec executable="${dx}" failonerror="true">
      <arg value="--dex" />
      <arg value="--output=bin/classes.dex" />
      <arg path="bin/classes" />
      <arg path="libs/*.jar" />
    </exec>
  </target>

  <target name="package resources" depends="dx" description="打包assets和res资源为资源压缩包(例如res.zip">
    <exec executable="${aapt}">
      <arg value="package" />
      <arg value="-f" />
      <arg value="-M" />
      <arg value="AndroidManifest.xml" />
      <arg value="-I" />
      <arg value="${android-jar}" />
      <arg value="-A" />
      <arg value="assets" />
      <arg value="-S" />
      <arg value="res" />
      <arg value="-F" />
      <arg value="bin/resources.ap_" />
      <arg value="--auto-add-overlay" />
    </exec>
  </target>

  <target name="apkbuilder" depends="package resources">
    <java classname="com.android.sdklib.build.ApkBuilderMain">
      <classpath>
        <pathelement path="D:\Android\android-sdk\tools\lib\sdklib.jar " />
      </classpath>

      <arg value="bin/unsigned.apk" />
      <arg value="-u" />
      <arg value="-z" />
      <arg value="bin/resources.ap_" />
      <arg value="-f" />
      <arg value="bin/classes.dex" />
      <arg value="-rf" />
      <arg value="src" />
      <arg value="-rj" />
      <arg value="libs" />
      <arg value="-nf" />
      <arg value="libs" />
    </java>
  </target>

  <target name="jarsigner" depends="apkbuilder">
    <exec executable="${jarsigner}">
      <arg value="-keystore" />
      <arg value="C:\Users\hp\Desktop\保全_其他文档\密钥\android.keystore" />
      <arg value="-storepass" />
      <arg value="android" />
      <arg value="-keypass" />
      <arg value="android" />
      <arg value="-signedjar" />
      <arg value="bin/signed.apk" />
      <arg value="bin/unsigned.apk" />
      <arg value="androiddebugkey" />
    </exec>
  </target>

  <target name="zipalign" depends="jarsigner">
    <exec executable="${zipalign}">
      <arg value="-v" />
      <arg value="4" />
      <arg value="bin/signed.apk" />
      <arg value="bin/signed_aligned.apk" />
    </exec>
  </target>

  <target name="clean" description="clean up">
    <!-- Delete directory trees -->
    <delete dir="gen" />
    <delete dir="bin/classes" />
  </target>
</project>  

由于我的项目中用到了 BuildConfig.java 文件, 在第一个生成 R 文件后我手动拷贝到了R.java的同级目录, 否则接下来的操作会报错

代码语言:javascript
复制
/** Automatically generated file. DO NOT MODIFY */
package com.nci.insprotection;

public final class BuildConfig {
    public final static boolean DEBUG = true;
}

注意

先手动编译通过在调整 ant 脚本, 否则很容易出错

参考

  1. https://blog.csdn.net/kevin_nazgul/article/details/48767101
  2. https://blog.csdn.net/javazejian/article/details/50579416
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 注意
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档