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

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

接着上文, 直接上 ant 脚本

<?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的同级目录, 否则接下来的操作会报错

/** 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


  1. https://blog.csdn.net/javazejian/article/details/50579416
目录
相关文章
|
3月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
197 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
10月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
1029 83
|
9月前
|
安全 算法 小程序
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
601 28
【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
|
10月前
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
302 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
11月前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
357 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
Android开发 开发者
Android Split APK介绍
【2月更文挑战第5天】
|
SQL 人工智能 算法
Android性能优化之应用瘦身(APK瘦身)
Android性能优化之应用瘦身(APK瘦身)
|
XML API Android开发
android S 上 安装apk出现android.os.FileUriExposedException
android S 上 安装apk出现android.os.FileUriExposedException
444 6
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
903 0

热门文章

最新文章

  • 1
    为什么微信发送的APP安装不了,.apk转化为.apk.1
    407
  • 2
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    601
  • 3
    Android历史版本与APK文件结构
    1029
  • 4
    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
    183
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    302
  • 6
    【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
    938
  • 7
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    357
  • 8
    apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
    374
  • 9
    使用Kivy创建“Hello World”应用并打包成APK
    1601
  • 10
    使用keytool查看Android APK签名
    1704