Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android打包利器Gradle之三板斧

Android打包利器Gradle之三板斧

編輯:關於Android編程

當傳統的手工打包方式遇上同一應用,多渠道/多包名及多種引導頁/icon等等差異時,就變成了苦不堪言的純體力活了。 但有了Gradle這一切不再是問題了,Gradle使得這一切變的so easy。

本遍主要介紹eclipse中使用Gradle打包解決多渠道問題,其它的問題基本差不多。在eclipse中使用Gradle只需要以下三板斧:

第一斧、生成Gradle相應文件

1.1 選中相應的項目,鼠標右鍵Export-GenerateGradle build files,然後一路next下去。

\

 

1.2 一路next下去後,finish後,即可生成以下目錄及文件

\


在生成的文件中,有兩個需要後續配置修改gradle-wrapper.properties及build.gradle文件,其它文件可以不動即可。

第二斧、下載gradle及配置相應的環境變量

2.1 雙擊打開gradle-wrapper.properties,復制出http://services.gradle.org/distributions的地址,訪問此網站

\

 

2.2 下載相應的gradle版本,個人下載了2.1版本,找到且下載gradle-2.1-all.zip,修改上面的distributionUrl為

distributionUrl=http://services.gradle.org/distributions/gradle-2.1-all.zip

\

 

2.3 配置gradle環境變化,將剛下載的zip包解壓出gradle-2.1,分別配置GRADLE_HOME及在Path後追加路徑

GRADLE_HOME配,指到gradle-2.1目錄即可,這裡為D:Program FilesAndroidgradle-2.1

Path指到bin目錄中,這裡為D:Program FilesAndroidgradle-2.1in

\

 

另外還需要配置ANDROID_HOME環境,在eclipse-preferences-Android中,找到SDK LOCATION

在環境配置中添加ANDROID_HOME的變量名,並指向與eclipse中的SDK LOCATION的路徑一樣即可.

\

 

配置好了,cmd檢查下grade是否配置成了,輸入gradle -w命令檢查下。

\

第三斧、Gradle配置及打包命令生成

3.1 Gradle打包過程是比較慢,且比較耗內存特別是多版本多N渠道一起打包時也許可能出現OOM。可以通過在gradle-wrapper.properties文件中,添加org.gradle.jvmargs=-Xmx2048m-XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError

\

3.2 修改build.gradle------比較關鍵的配置文件,對多渠道/多包名及各種差異下的配置都在build.gradle文件下配置。

這裡先上下個人demo項目中的配置,最後再對關鍵的地方進行解釋。

----------------------------------------build.gradle文件開始-----------------------------------------

buildscript {

repositories {

mavenCentral()

}

dependencies {

classpath'com.android.tools.build:gradle:0.14.+'

}

 

tasks.withType(JavaCompile){ options.encoding = UTF-8 }

}

apply plugin: 'android'

 

dependencies {

compile fileTree(dir:'libs', include: '*.jar')

}

 

android {

compileSdkVersion 21

buildToolsVersion21.1.2

 

 

defaultConfig {

applicationIdcom.test.drawdemo

minSdkVersion10

targetSdkVersion 12

versionCode200

versionNamev2.0.5

 

testApplicationId com.test.drawdemo

testInstrumentationRunner android.test.InstrumentationTestRunner

 

// 默認是offical的渠道,即官方的版本

manifestPlaceholders = [UMENG_CHANNEL_VALUE: offical]

}

//app 簽名文件

signingConfigs {

release {

storeFile file(demo.keystore)

storePassword 123456

keyAlias demo.keystore

keyPassword 123456

}

}

 

buildTypes {

release {

signingConfigsigningConfigs.release

 

// 不顯示Log

buildConfigField boolean, LOG_DEBUG,false

 

minifyEnabled true

proguardFiles 'proguard-project.txt'

}

}

 

// 移除lint檢查的error

lintOptions {

abortOnError false

ignoreWarnings true

}

// 友盟多渠道打包

productFlavors {

offical {}

appchina {}

anzhi {}

mumayi {}

lenovo {}

qq {}

huawei {}

xiaomi {}

baidu {}

meizu {}

taobao {}

huijia360 {}

hiapk {}

}

 

productFlavors.all { flavor->

flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]

}

 

//------------加載 so庫開始------------

task copyNativeLibs(type:Copy) {

from(new File('libs')){ include '**/*.so' }

into newFile(buildDir, 'native-libs')

}

 

tasks.withType(JavaCompile) {compileTask -> compileTask.dependsOn copyNativeLibs }

 

clean.dependsOn'cleanCopyNativeLibs'

 

tasks.withType(com.android.build.gradle.tasks.PackageApplication){

pkgTask -> pkgTask.jniFolders =new HashSet()

pkgTask.jniFolders.add(newFile(buildDir,'native-libs'))

}

//---------------加載 so庫結束---------

sourceSets {

main {

manifest.srcFile 'AndroidManifest.xml'

java.srcDirs = ['src']

resources.srcDirs = ['src']

aidl.srcDirs = ['src']

renderscript.srcDirs = ['src']

res.srcDirs = ['res']

assets.srcDirs = ['assets']

}

}

}

----------------------------------------build.gradle文件結束-----------------------------------------

3.3 執行gradlewclean。打開cmd,cd到項目目錄中,先輸入gradlew clean。 這裡的gradlew 是對gradle命令的包裝,gradlew clean後可以使gradle會自成同步下載Gradle相應的依賴,並可以把上次打包的清掉重新打,會刪除掉build目錄及build目錄下所有文件。

\

3.4 執行gradlew build命令,即可完成整個打包過程了。

\

接下來可以看到項目下產生了build目錄,在這裡的build-->outputs-->apk裡就生成了各渠道的包了.

 

\

可以看到生成了一堆的包,有release及debug版本,簽名版的及未簽名。若不想要debugt版本的apk,可以在打包時輸入 gradlew aR命令即可。aR是assembleRelease的簡寫。當然也可以只生成debug版本的(gradlew assembleDebug)

 

大功造成,怎麼樣是不是很easy啊,呵呵了。。。下面對build.gradle簡單的介紹下。

 

補充說明--關於build.gradle配置

 

1. buildscript元素

除了dependencies-classpath中的gradle版本需要改下,基本上不需要修改。

1.1 dependencies {

classpath'com.android.tools.build:gradle:0.12.+'

}

gradle:0.12.+修改成gradle:0.14.+,對應的gradle 2.1 采用新的gradle版本,比較關鍵。

1.2 tasks.withType(JavaCompile) { options.encoding = UTF-8 } ,這裡老版本gradle是Compile,需要修改成JavaCompile

2、applyplugin: 'android'

-----不做修改

3、dependencies元素

dependencies{

compilefileTree(dir: 'libs', include: '*.jar')

} 指定項目中相應的jar包依賴,注意 :

3.1 這裡配置指令了,會和proguard混淆配置中-libraryjars libs/xxxx.jar沖突重新配置了依賴jar包。可以將proguard混淆文件中的-libraryjars 配置注釋掉 加#-libraryjars ...

3.2 dependencies只指令了jar包依賴了,並沒有指令so庫依賴,so庫的依賴得單獨配置...,後面有介紹。。但有個變態的方法就是可以把所的so庫文件,全部用zip壓縮到一個文件中比如so.zip,再把so.zip改名成so.jar這樣就不需要指令so庫了,比較變態吧。呵呵....

4. android元素

這裡是重重之重,配置比較繁瑣,

4.1 defaultConfig元素

applicationId 指令包名,老版本是packageName指令

其它可配置版本信息

4.2 signingConfigs 元素

可以配置簽名文件信息,文件位置別名命令等

4.3 buildTypes 元素

生成的apk有兩種type類型,debug與release版本,可以分別對其配置,配置使用哪個簽名配置(signingConfigs)、是否混淆等等

minifyEnabled 是新版本的元素,老版本runProguard已經廢棄了。

proguardFiles 'proguard-project.txt' 指令使用與build.gradle同一目錄中的proguard-project.txt混淆文件.

4.4 lintOptions元素

配置下,忽略lint相應的警告...

4.5 Flavors機制,,

主要是靠,這個機制進行 多渠道,多包名的打包....,

剩下的加載 so庫,直接復制下,不用改,拿好,不謝。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved