在Linux下使用gradle自动打包

本文详细介绍如何从零开始搭建Android开发环境,包括下载并安装必要的软件包如Android SDK、Gradle等,配置Java环境,以及更新SDK组件等内容。

原文:http://www.cnblogs.com/chenpingzhao/archive/2016/07/07/5651347.html

一、下载软件包

1、下载地址

1
2
wget https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
wget http://services.gradle.org/distributions/gradle-2.12-bin.zip

二、安装

1、java
1
2
3
4
5
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --config java
sudo update-alternatives --config javac

2、Android sdk

1
./android list sdk

查看源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Refresh Sources:
  Fetching https://dl.google.com/android/repository/addons_list-2.xml
  Validate XML
  Parse XML
  Fetched Add-ons List successfully
  Refresh Sources
  Fetching URL: https://dl.google.com/android/repository/repository-11.xml
  Validate XML: https://dl.google.com/android/repository/repository-11.xml
  Parse XML:    https://dl.google.com/android/repository/repository-11.xml
  Fetching URL: https://dl.google.com/android/repository/addon.xml
  Validate XML: https://dl.google.com/android/repository/addon.xml
  Parse XML:    https://dl.google.com/android/repository/addon.xml
  Fetching URL: https://dl.google.com/android/repository/glass/addon.xml
  Validate XML: https://dl.google.com/android/repository/glass/addon.xml
  Parse XML:    https://dl.google.com/android/repository/glass/addon.xml
  Fetching URL: https://dl.google.com/android/repository/extras/intel/addon.xml
  Validate XML: https://dl.google.com/android/repository/extras/intel/addon.xml
  Parse XML:    https://dl.google.com/android/repository/extras/intel/addon.xml
  Fetching URL: https://dl.google.com/android/repository/sys-img/android/sys-img.xml
  Validate XML: https://dl.google.com/android/repository/sys-img/android/sys-img.xml
  Parse XML:    https://dl.google.com/android/repository/sys-img/android/sys-img.xml
  Fetching URL: https://dl.google.com/android/repository/sys-img/android-wear/sys-img.xml
  Validate XML: https://dl.google.com/android/repository/sys-img/android-wear/sys-img.xml
  Parse XML:    https://dl.google.com/android/repository/sys-img/android-wear/sys-img.xml
  Fetching URL: https://dl.google.com/android/repository/sys-img/android-tv/sys-img.xml
  Validate XML: https://dl.google.com/android/repository/sys-img/android-tv/sys-img.xml
  Parse XML:    https://dl.google.com/android/repository/sys-img/android-tv/sys-img.xml
  Fetching URL: https://dl.google.com/android/repository/sys-img/google_apis/sys-img.xml
  Validate XML: https://dl.google.com/android/repository/sys-img/google_apis/sys-img.xml
  Parse XML:    https://dl.google.com/android/repository/sys-img/google_apis/sys-img.xml
Packages available for installation or update: 22
   1- SDK Platform Android 4.4.2, API 19, revision 4
   2- SDK Platform Android 4.3.1, API 18, revision 3
   3- SDK Platform Android 4.2.2, API 17, revision 3
   4- SDK Platform Android 4.1.2, API 16, revision 5
   5- SDK Platform Android 4.0.3, API 15, revision 5
   6- Google APIs, Android API 23, revision 1
   7- Google APIs, Android API 22, revision 1
   8- Google APIs, Android API 21, revision 1
   9- Google APIs, Android API 19, revision 20
  10- Glass Development Kit Preview, Android API 19, revision 11
  11- Google APIs, Android API 18, revision 4
  12- Google APIs, Android API 17, revision 4
  13- Google APIs, Android API 16, revision 4
  14- Google APIs, Android API 15, revision 3
  15- GPU Debugging tools, revision 3.1
  16- GPU Debugging tools, revision 1.0.3
  17- Android Auto Desktop Head Unit emulator, revision 1.1
  18- Google Play APK Expansion library, revision 1
  19- Google Play Licensing Library, revision 1
  20- Google Play Billing Library, revision 5
  21- Android Auto API Simulators, revision 1
  22- Google Web Driver, revision 2

根据需要进行安装

1
./android update sdk --no-ui --filter 1,31,tool,platform-tool

如果google很慢,可以改hosts  

1
74.125.237.1 dl-ssl.google.com
3、gradle 

加入环境变量

1
export PATH=/mnt/javasrc/gradle-2.12/bin:/mnt/javasrc/android-sdk-linux:$PATH

三、编译测试

1
2
gradle assRelease
gradle clean
<think>我们正在讨论的是如何在Gradle中配置自动分类打包(assemble)。根据用户之前的上下文,用户已经了解了`minifyEnabled`的作用和配置,现在希望进一步了解如何通过Gradle命令来自动打包,特别是如何根据不同的分类(比如不同的productFlavor和buildType)进行打包。 从引用[1]中我们可以知道,Gradle提供了`assemble`命令来编译所有productFlavor和buildType的APK,同时也可以指定特定的productFlavor和buildType来编译特定的APK。例如: - `gradle assemble`:编译所有变体 - `gradle assembleFlavorRelease`:编译特定flavor的release版本 用户希望的是“自动分类打包”,也就是能够按照一定的分类(比如不同的渠道、不同的构建类型)自动执行打包任务。我们可以通过配置Gradle的构建变体(build variants)来实现,构建变体由productFlavor和buildType组合而成。 ### 配置步骤 #### 1. 定义productFlavors(渠道) 在`build.gradle`文件中,我们可以定义多个productFlavor,每个代表一个渠道或一个分类。例如: ```groovy android { flavorDimensions "version" productFlavors { free { dimension "version" // 这里可以配置free版本特有的设置 } paid { dimension "version" // 这里可以配置paid版本特有的设置 } } } ``` #### 2. 定义buildTypes(构建类型) 通常,Android项目默认有debug和release两种构建类型。我们也可以自定义其他类型,例如: ```groovy android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { minifyEnabled false } staging { // 可以复制release的配置,然后修改部分 initWith release // 例如,修改applicationId后缀 applicationIdSuffix ".staging" } } } ``` #### 3. 组合构建变体 配置了productFlavors和buildTypes后,Gradle自动生成对应的构建变体(variants)。例如,上面的配置会生成以下变体: - freeDebug - freeRelease - freeStaging - paidDebug - paidRelease - paidStaging #### 4. 执行分类打包 我们可以通过以下命令来打包特定的变体: - 打包所有变体:`gradle assemble`(或`./gradlew assemble`) - 打包所有free变体:`gradle assembleFree`(这会生成freeDebug, freeRelease, freeStaging) - 打包所有release变体:`gradle assembleRelease`(这会生成freeRelease, paidRelease) - 打包特定的变体:`gradle assembleFreeRelease` #### 5. 自动打包脚本 我们可以编写一个脚本(如shell脚本或bat脚本)来执行一系列Gradle命令,实现自动分类打包。例如,一个简单的shell脚本(macOS/Linux): ```bash #!/bin/bash # 打包所有free版本 ./gradlew assembleFree # 打包所有paid的release版本 ./gradlew assemblePaidRelease ``` 对于Windows,可以编写一个bat脚本: ```bat @echo off gradlew assembleFree gradlew assemblePaidRelease ``` #### 6. 进阶:使用Gradle任务依赖 我们也可以自定义Gradle任务,将多个打包任务组合起来。例如,在`build.gradle`中定义一个任务,让它依赖于多个assemble任务: ```groovy task assembleAllFree(type: GradleBuild) { tasks = ['assembleFreeDebug', 'assembleFreeRelease', 'assembleFreeStaging'] } task assembleAllPaid(type: GradleBuild) { tasks = ['assemblePaidDebug', 'assemblePaidRelease', 'assemblePaidStaging'] } task assembleAllRelease(type: GradleBuild) { tasks = ['assembleFreeRelease', 'assemblePaidRelease'] } ``` 然后就可以通过`gradle assembleAllFree`等命令来执行分类打包。 ### 注意事项 - 在命令行中执行Gradle命令时,使用`gradlew`(Gradle Wrapper)而不是全局的`gradle`命令,这样可以保证使用项目指定的Gradle版本。 - 如果项目是多模块的,可以在命令中指定模块,例如:`gradlew :app:assembleFreeRelease`。 ### 引用说明 根据引用[1],我们了解到Gradle的assemble命令可以指定productFlavor和buildType,并且支持缩写。引用[2]和[3]则提供了关于自动打包的配置和环境设置的背景。引用[4]提到了敏感信息的处理,虽然与当前问题不直接相关,但在实际打包中,如果涉及签名和加固,可以参考其方法。 ### 总结 通过配置productFlavors和buildTypes,我们可以定义多个构建变体,然后使用Gradle的assemble命令按分类打包。同时,我们可以通过脚本或自定义Gradle任务来进一步自动化这个过程。 §§相关问题§§ 1. 如何在Gradle中配置多渠道打包(如友盟统计)? 2. 如何自定义Gradle任务以实现更复杂的打包流程? 3. 在自动打包中,如何自动增加版本号并生成对应APK文件名? 4. 如何通过Gradle命令只打包特定模块?</think>在 Gradle 中配置自动分类打包(assemble)主要通过 **productFlavors** 和 **buildTypes** 的组合实现,以下是详细配置步骤和示例: ### 一、核心配置方法(build.gradle) ```groovy android { // 1. 定义构建类型 buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { applicationIdSuffix ".debug" // 添加调试后缀 } staging { // 自定义构建类型 initWith release // 继承release配置 applicationIdSuffix ".staging" } } // 2. 定义产品风味(分类维度) flavorDimensions "channel", "version" productFlavors { // 渠道维度 free { dimension "channel" applicationIdSuffix ".free" } paid { dimension "channel" applicationIdSuffix ".paid" } // 版本维度 basic { dimension "version" versionNameSuffix "-basic" } pro { dimension "version" versionNameSuffix "-pro" } } } ``` ### 二、打包命令分类执行 配置后会自动生成组合任务,按分类执行打包: ```bash # 1. 打包所有变体 ./gradlew assemble # 2. 按构建类型打包 ./gradlew assembleRelease # 所有release版本 ./gradlew assembleDebug # 所有debug版本 ./gradlew assembleStaging # 所有staging版本 # 3. 按渠道打包 ./gradlew assembleFree # 所有free渠道变体 ./gradlew assemblePaid # 所有paid渠道变体 # 4. 按版本打包 ./gradlew assembleBasic # 所有基础版 ./gradlew assemblePro # 所有专业版 # 5. 精确组合打包 ./gradlew assembleFreeProRelease # free渠道+pro版+release类型 ./gradlew assemblePaidBasicDebug # paid渠道+basic版+debug类型 ``` ### 三、自动打包增强技巧 1. **自动输出路径配置** 在`build.gradle`中添加APK重定向: ```groovy android.applicationVariants.all { variant -> variant.outputs.all { output -> def formattedDate = new Date().format('yyyyMMdd') outputFileName = "${variant.flavorName}_${variant.buildType.name}_v${variant.versionName}_${formattedDate}.apk" } } ``` 2. **敏感信息安全处理**(引用[4]) 创建`secrets.properties`文件: ```properties KEY_PATH=/path/to/keystore KEY_PASSWORD=your_password ``` 在`build.gradle`中读取: ```groovy def secrets = new Properties() file("secrets.properties").withInputStream { secrets.load(it) } signingConfigs { release { storeFile file(secrets.getProperty("KEY_PATH")) storePassword secrets.getProperty("KEY_PASSWORD") } } ``` ### 四、典型目录结构 ``` app/ ├── build/ │ └── outputs/ │ └── apk/ │ ├── free/ # 免费渠道 │ │ ├── debug/ │ │ └── release/ │ └── paid/ # 付费渠道 │ ├── debug/ │ └── release/ └── src/ ├── free/ # 免费渠道专属代码 ├── paid/ # 付费渠道专属代码 └── main/ # 公共代码 ``` ### 五、执行效果示例 ```bash $ ./gradlew assembleFreeRelease > 生成APK: app-free-release-v1.0_20230815.apk $ ./gradlew assemblePaidBasicDebug > 生成APK: paid-basic-debug-v1.0_20230815.apk ``` > **最佳实践**:结合持续集成(CI)工具(如Jenkins),可通过`./gradlew assembleFreeRelease assemblePaidRelease`实现每日自动构建[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值