【转】Android 多渠道打包:使用Gradle和Android Studio
来源:互联网 发布:幻影粒子软件 编辑:程序博客网 时间:2024/05/21 17:25
本文出自: http://blog.csdn.net/jjwwmlp456/article/details/45057067 ----------------- 匆忙拥挤repeat
Gradle,这个东西好复杂,不过在Android中,我们知道它大概怎么用,它的依据何来,就够了。
Gradle的DSL,领域特定语言(domain-specific languages,简称DSL),地址:http://gradle.org/docs/2.3/dsl/
Gradle的用户指南,地址:http://gradle.org/docs/2.3/userguide/userguide.html
Android-Gradle-DSL Android结合Gradle的DSL
下载地址:https://developer.android.com/shareables/sdk-tools/android-gradle-plugin-dsl.zip
简单介绍Android-Gradle构建插件的官方地址:https://developer.android.com/tools/building/plugin-for-gradle.html
详细介绍Android-Gradle构建插件的官方地址:http://tools.android.com/tech-docs/new-build-system
build.gradle的基本形式
Android Studio 建立project,可在其下建立多个moudle。
一个project自动生成一个build.gradle,每个module下也自动生成一个build.gradle (本文主要讨论module中的build.gradle构建)
module/build.gradle:
- apply plugin: 'com.android.application' //启用android 应用插件
- android {
- compileSdkVersion 22
- buildToolsVersion "22.0.1"
- defaultConfig {
- applicationId "com.stone.testbuild"
- minSdkVersion 8
- targetSdkVersion 22
- versionCode 1
- versionName "1.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
- }
- dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:22.0.0'
- }
Android-Gradle DSL 简介
defaultConfig{}
默认配置,是ProductFlavor类型。它共享给其他ProductFlavor使用
sourceSets{ } 源文件目录设置,是AndroidSourceSet类型。
buildTypes{ } BuildType类型
signingConfigs{ } 签名配置,SigningConfig类型
productFlavors{ } 产品风格配置,ProductFlavor类型
testOptions{ } 测试配置,TestOptions类型
aaptOptions{ } aapt配置,AaptOptions类型
lintOptions{ } lint配置,LintOptions类型
dexOptions{ } dex配置,DexOptions类型
compileOptions{ } 编译配置,CompileOptions类型
packagingOptions{ } PackagingOptions类型
jacoco{ } JacocoExtension类型。 用于设定 jacoco版本
splits{ } Splits类型。
在DSL文档中,以上每个类型都有它的详细配置选项
多渠道打包
自动签名、混淆、打包、注入多个渠道。
例,module>build.gradle:
- apply plugin: 'com.android.application'
- /*
- 定义一个方法,仅def声明时,返回类型任意(自动判断)
- 可以将返回值直接写成String 或def String
- gradle支持groovy语言,groovy默认引入的包有:
- java.io.* java.lang.* java.math.BigDecimal java.math.BigInteger
- java.net.* java.util.* groovy.lang.* groovy.util.*
- */
- def String computeVersionName() {
- return "8.8.8"
- }
- android {
- compileSdkVersion 22
- buildToolsVersion "22.0.1"
- defaultConfig {
- applicationId "com.stone.myapplication"
- minSdkVersion 8
- targetSdkVersion 22
- versionCode 1
- versionName computeVersionName() //使用外部定义的方法
- /*
- manifestPlaceholders
- manifest中使用占位符,如:<... android:name="${YOUR_APP_KEY}" >
- 以[key-value]形式替换:[YOUR_APP_KEY:"value"]
- */
- manifestPlaceholders = [YOUR_APP_KEY: "友盟后台的appkey"]
- }
- signingConfigs { //gradle assembleRelease
- /*
- 可以定义多个签名配置项,如下面的myConfig
- */
- myConfig {
- storeFile file("stone.keystore")
- storePassword "mypasswd"
- // storePassword System.console().readLine("\nKeystore password: ")
- keyAlias "stone"
- keyPassword "mypasswd"
- // keyPassword System.console().readLine("\nKey password: ")
- }
- }
- buildTypes {
- /*
- 可以配置多个buildType项,如下面的release,debug,aabbcc
- */
- release {
- minifyEnabled true //译:使变小enabled。 即启用混淆器
- //混淆文件:sdk/tools/proguard/proguard-android.txt 和 当前module下的proguard-rules.pro
- // proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
- //getDefaultProguardFile('proguard-android.txt'),
- //getDefaultProguardFile('proguard-android-optimize.txt'),
- signingConfig signingConfigs.myConfig
- zipAlignEnabled true //混淆后的zip优化,默认为true,可不写。当不显示配置为true时,不会生成unaligned.apk
- }
- debug {
- debuggable true //启用debug的buildType配置
- }
- aabbcc {//自定义配置,未配置签名项,所以会生成未签名apk
- multiDexEnabled true
- }
- }
- productFlavors {
- /*
- productFlavors-产品风格:
- 即不同产品的配置,它会基于上面的公共配置项defaultConfig
- 下面的配置项与buildTypes{}中的配置项,成类似sql中的全联(full join)关系
- 当执行 $gradle build 命令后,会生成:
- module-flavor1-release-unaligned.apk
- module-flavor1-release.apk
- module-flavor1-debug-unaligned.apk
- module-flavor1-debug.apk
- module-flavor1-aabbcc.apk
- ...flavor2...apk
- applicationId 用于标识 在谷歌Play商店上的唯一标识 默认不配置,则与app的AndroidManifest.xml中的package一致
- 仅替换<manifest>中的package属性值,其它不受影响
- */
- flavor1 {
- proguardFiles 'proguard-rules.pro'
- applicationId "com.stone.myapplication.pro" //比如 专业版
- manifestPlaceholders = [channelID: "百度应用平台"]
- }
- flavor2 {
- proguardFile 'proguard-rules.pro'
- applicationId "com.stone.myapplication.free" //比如 免费版
- manifestPlaceholders = [channelID: "豌豆夹"]
- }
- }
- }
- dependencies {
- // Local binary dependency 本地jar包
- compile fileTree(dir: 'libs', include: ['*.jar'])
- // Module dependency 引用android-library项目
- compile project(':eventbuslib')
- /*
- Remote binary dependency download to local group:name:version
- 配置远程仓库中的jar包,打包时,检查本地有没有,若没有则下载到本地。
- */
- compile 'com.android.support:appcompat-v7:22.0.0'
- compile 'com.android.support:support-v4:22.0.0'
- compile 'com.android.support:cardview-v7:22.0.0'
- compile 'com.android.support:recyclerview-v7:22.0.0'
- }
manifest.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.stone.myapplication">
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme">
- <activity
- android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- <meta-data
- android:name="UMENG_APPKEY"
- android:value="${YOUR_APP_KEY}" />
- <meta-data
- android:name="channelName"
- android:value="${channelID}" />
- </activity>
- </application>
- </manifest>
最后,执行 $gradle build 命令 , 就ok了
完整示例:https://github.com/aa86799/ProguardPack
- 【转】Android 多渠道打包:使用Gradle和Android Studio
- Android 多渠道打包:使用Gradle和Android Studio
- Android 多渠道打包:使用Gradle和Android Studio
- Android 多渠道打包:使用Gradle和Android Studio
- Android Studio使用Gradle多渠道自动打包
- android studio中使用gradle多渠道打包
- Android Studio使用Gradle进行多渠道打包
- Android Studio 使用Gradle多渠道打包
- Android Studio 使用Gradle多渠道打包
- Android Studio Gradle 多渠道打包
- Android Studio--Gradle多渠道打包
- Android Studio--Gradle多渠道打包
- Android studio gradle 多渠道打包
- Android Studio Gradle多渠道打包
- Android studio gradle 多渠道打包
- Android Studio--Gradle多渠道打包
- Android Studio Gradle多渠道打包
- android studio gradle 多渠道打包
- android开发NDK环境配置
- 【问题答疑】eclipse无法在线安装genymotion插件
- 使用arm组件mesh网络文章
- UISegmentedControl、UISwitch、UISlider
- jquery工具方法
- 【转】Android 多渠道打包:使用Gradle和Android Studio
- Windows平台下Makefile学习笔记(一)
- editplus快捷键大全
- Unable to find the wrapper "https"错误的解决办法
- Oracle 批量insert报错处理
- Fragment 和 ViewPager 基础
- new与malloc的区别
- 【CSS3】nth-of-type(n)选择器
- swipebacklayout 问题