1. 程式人生 > >Eclipse環境下 使用Gradle進行編譯實現自動分包

Eclipse環境下 使用Gradle進行編譯實現自動分包

標籤(空格分隔): MultiDex

gradle安裝
到Gradle官網下載最新版本的Gradle,安裝;
將bin目錄所在位置新增到環境變數的path中;

工程轉化
在工程目錄右鍵 –>Export –> Generate Gradle files,Eclipse會自動生成Gradle相關檔案;
右鍵–> Configure –>轉化成Gradle工程;

如果工程有依賴的lib,則在根目錄中會有setting.gradle檔案,如果只有一個主工程,則此檔案不是必需;

setting.gradle

include ‘:libs:Volley’
include ‘:libs:Android-PullToRefresh:library’
include ‘:tmp:tmps’

在工程的根目錄下,build.gradle 檔案內容如下:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
   repositories {
     jcenter()
   }

   dependencies {
     classpath ‘com.android.tools.build:gradle:1.1.+’
  }
}

task wrapper(type: Wrapper) {
   gradleVersion = ‘2.0’
} // Top-level build file where you can add configuration options common to all sub-projects/modules.

在工程內部的build.gradle中,需要進行如下配置:
新增

lintOptions{
   abortOnError false
}

防止因為lint檢查,打包失敗;

在主工程的biuld.gradle中,新增

defaultConfig{
   multiDexEnabled true
}

開啟多個Dex打包模式。 但是這個的前提是,在工程的Application中已經集成了MultiDexApplication;

打包處理指令碼

afterEvaluate {
   tasks.matching {
     it.name.startsWith(‘dex’)
   }.each { dx ->
     if (dx.additionalParameters == null) {
     dx.additionalParameters = [‘–multi-dex’]
    } else {
       dx.additionalParameters += ‘–multi-dex’
    }

// optional
   //dx.additionalParameters += ‘–main-dex-list=main-dex-list.txt’.toString()
   //dx.additionalParameters += ‘–minimal-main-dex’
   dx.additionalParameters += ‘–set-max-idx-number=8000’
  }
}

–main-dex 用於指定第一個包中必需包含的類,存放在 main-dex-list.txt中,檔名可自行修改
–minimal-main-dex 最小化主包,與–main-dex-list配合使用,則主包中只含有檔案中指定的類


–set-max-idx-number 用於指定每個dex包中最多的函式數量,多餘此數量則自動進行分包

新增打包所需的簽名

signingConfigs{
   myConfig{
     storeFile file(“keys”)
     storePassword “passwrod”
     keyAlias “kayAlins”
     keyPassword “password”
   }
}
buildTypes{
   release {
     signingConfig signingConfigs.myConfig
   }
}

新增so檔案庫

//noinspection all
task copyNativeLibs(type: Copy) {
   // third party lib so
   from(new File(projectDir, ‘libs’)) { include ‘armeabi/*.so’ }
   into new File(buildDir, ‘native-libs’)
}

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

//noinspection all
tasks.withType(com.android.build.gradle.tasks.PackageApplication) {
   pkgTask ->
   pkgTask.jniFolders = new HashSet()
   pkgTask.jniFolders.add(new File(buildDir, ‘native-libs’))
}

關於提示版本不對應問題:gradle version 1.10 is required. current version is 2.4

修改專案根目錄下的build.gradle,classpath ‘com.android.tools.build:gradle:1.2.+’將版本號改為更高的版本;
修改專案根目錄下Gradle–>Wrapper中的distributionUrl=https://services.gradle.org/distributions/gradle-2.4-all.zip 版本號改為對應的安裝版本
到根目錄下,執行gradlew build;

.9png導致的編譯失敗問題
Eclipse中編譯執行正常,但是通過Gradle打包,提示.9png 有問題。原因是,部分.9.png製作錯誤,Eclipse會自動優化為png格式,Gradle不會自動優化,需要手工將.9.png修正

Duplicate異常 duplicate entry: android/support/multidex/Multidex V14.class
原因是專案中重複使用了此類相關的包。
解決辦法:

  1. 工程–>Properties–>Java Build Path–>Order and Export中,不要勾選重複的包即可。
  2. 在gradle中新增exclude欄位compile fileTree(dir: ‘libs’, include: ‘*.jar’, exclude: ‘android-support-multidex.jar’)