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

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 3
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 4
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 5
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 6
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥
  • 7
    Android实战经验之Kotlin中快速实现MVI架构
  • 8
    即时通讯安全篇(一):正确地理解和使用Android端加密算法
  • 9
    【Android Git】Git版本回退方式
  • 10
    Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    69
  • 2
    Android历史版本与APK文件结构
    184
  • 3
    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
    62
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    82
  • 5
    【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
    169
  • 6
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    44
  • 7
    apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
    81
  • 8
    使用Kivy创建“Hello World”应用并打包成APK
    462
  • 9
    使用keytool查看Android APK签名
    519
  • 10
    解决android apk安装后出现2个相同的应用图标
    457