命令行下编译打包安卓apk
场景:服务器端根据客户信息生成定制的安卓apk包,比如自定义图标、接口地址、第三方key。
解决步骤:(注:本文主要描述如何配置服务端的命令行打包环境,可以根据自己的后端语言调用命令行来执行打包过程。)
- 安装JDK。https://www.oracle.com/java/technologies/javase-downloads.html 下载jdk,配置JAVA_HOME 环境变量
- 下载和配置gradle环境变量
- 下载 安卓sdk tools,该用具用来自动下载安卓不同版本的sdk, https://androidsdkmanager.azurewebsites.net/tools.html
- 使用sdk tools 的工具 ./bin/sdkmamager 来下载编译打包需要的工具:"build-tools;30.0.2" "platform-tools",注意,jdk9和之后的版本不包括javaee的包,所以运行sdkmanager会报错: Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema ,可以通过gradle将依赖下载下来,然后加入sdkmanager这个脚本文件里面的java的classpath。在tools\libs的目录下新建build.gradle文件,内容如下,执行 gradle copyJars任务,会下载依赖并复制到本目录下。下载完毕后在sdkmanager文件的classpath的末尾添加
%APP_HOME%\lib\jaxb-runtime-2.3.2.jar; 执行./sdkmanager --sdk_root=xxxxxx "build-tools;30.0.2" "platform-tools",其中sdk_root 是要存放安卓sdk的地方,设置ANDROID_HOME指向这个目录
apply plugin: 'java' repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'} mavenCentral() } dependencies { // https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime compile group: 'org.glassfish.jaxb', name: 'jaxb-runtime', version: '2.3.2' } task copyJars(type: Copy) { from configurations.runtime into './' // 目标位置 }