Android下gradle編譯代碼及混淆

來源:互聯網
上載者:User

標籤:

1、什麼是Gradle?

百度百科說:Gradle 是以 Groovy 語言為基礎,面向Java應用為主,基於DSL文法的自動化構建工具。

功能:
  • gradle對多工程的構建支援很出色,工程依賴是gradle的第一公民。
  • gradle支援局部構建。
  • 支援多方式依賴管理:包括從maven遠程倉庫、nexus私服、ivy倉庫以及本地檔案系統的jars或者dirs
  • gradle是第一個構建整合工具(the first build integration tool),與ant、maven、ivy有良好的相容相關性。
  • 輕鬆遷移:gradle適用於任何結構的工程(Gradle can adapt to any structure you have.)。你可以在同一個開發平台平行構建原工程和gradle工程。通常要求寫相關測試,以保證開發的外掛程式的相似性,這種遷移可以減少破壞性,儘可能的可靠。這也是重構的最佳實務。
  • gradle的整體設計是以作為一種語言為導向的,而非成為一個嚴格死板的架構
gradle提供了什麼
  • 一種可切換的,像maven一樣的基於約定的構建架構,卻又從不鎖住你(約定優於配置)
  • 強大的支援多工程的構建
  • 強大的依賴管理(基於Apache Ivy),提供最大的便利去構建你的工程
  • Language for dependency based programming
  • 全力支援已有的Maven或者Ivy倉庫基礎建設
  • 支援傳遞性依賴管理,在不需要遠程倉庫和pom.xml和ivy設定檔的前提下
  • 基於groovy指令碼構建,其build指令碼使用groovy語言編寫
  • 具有廣泛的領域模型支援你的構建A rich domain model for describing your build.

2、gradle的安裝

  gradle的官網下載:https://gradle.org/downloads

  如果上面的下載慢或訪問不了可以在這下載:http://www.androiddevtools.cn/

  androidStudio的話,直接解壓,然後把目錄導進去就ok了。

  eclipse的要,解壓後要配置環境變數,具體的百度就好了,網上大把資料。

 

3、分析

  下面舉個例子:這個是gradle2.0之前的文法(2.0以後文法改了)

 1 apply plugin: ‘android‘ 2  3 buildscript { 4     repositories { 5         mavenCentral() 6     } 7     dependencies { 8         classpath ‘com.android.tools.build:gradle:0.7.3‘ 9         classpath ‘net.sf.proguard:proguard-gradle:4.10‘10     }11 }12 13 dependencies {14     compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])15 }16 17 android {18     compileSdkVersion 2119     buildToolsVersion "21.1.2"20 21     defaultConfig {22         minSdkVersion 923     }24 }25 26 //type:可以當做要使用什麼工具, dependsOn:執行該動作的在compileReleaseJava執行後執行27 task copyAssets(type: Copy, dependsOn: ‘compileReleaseJava‘) {28     from ‘assets‘29     into ‘build/classes/release/assets‘30 }31 32 task genJar(type: Jar, dependsOn: ‘copyAssets‘) {33     from fileTree(dir: ‘build/classes/release‘)34     archiveName = ‘gp_android_sdk_unproguard.jar‘35 }36 37 task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) {38     outjars ‘build/gp_android_sdk.jar‘39     libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar"40 41     // 具體需要keep住的類42     configuration ‘sdk_proguard.pro‘43 }

  在26行講到的type:gradle的文法中有很多:什麼Copy、Delete、Jar都是。具體的可看Gradle的開來源文件:https://gradle.org/docs/current/javadoc/index.html

  如Copy:從 src/main/doc 目錄拷貝到 build/target/doc

 task copyDocs(type: Copy) {     from ‘src/main/doc‘     into ‘build/target/doc‘ }

  是不是很簡單。。其他的基礎的百度看看別人的文檔,這裡推薦一篇:http://www.stormzhang.com/android/2014/02/28/android-gradle/

 

下面說說混淆:

 

 buildTypes {        release {            runProguard false            proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.txt‘        }    }

官方把混淆寫在上面代碼的位置,但如果同時混淆並匯出jar包,可用:(還有沒有別的方法還沒試過)

task genJar(type: Jar, dependsOn: ‘copyAssets‘) {    from fileTree(dir: ‘build/classes/release‘)    archiveName = ‘gp_android_sdk_unproguard.jar‘}task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) {    outjars ‘build/gp_android_sdk.jar‘    libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar"    // 具體需要keep住的類    configuration ‘sdk_proguard.pro‘}

其實gradle編譯的時候會產生jar包的:在build目錄的exploded-aar下(不同版本的gradle會不一樣的)回產生:classes.jar就是項目的jar包,這樣你把module用gradle編譯產生的classes.jar就是你要的jar包。

這裡給個gradle2.0之後的例子:
 1 //該指令碼請使用gradle2.0以上編譯 2  3 apply plugin: ‘com.android.application‘ 4  5 buildscript { 6     repositories { 7         jcenter() 8     } 9     dependencies {10         classpath ‘com.android.tools.build:gradle:1.0.0‘11         classpath ‘net.sf.proguard:proguard-gradle:4.10‘12     }13 }14 15 dependencies {16     compile fileTree(dir: ‘libs‘, include: [‘*.jar‘])17 }18 19 android {20     compileSdkVersion 2121     buildToolsVersion "21.1.2"22 23     defaultConfig {24         minSdkVersion 925     }26 }27 28 task copyAssets(type: Copy, dependsOn: ‘compileReleaseJava‘) {29     from ‘src/main/assets‘30     into ‘build/intermediates/classes/release/assets‘31 }32 33 task genJar(type: Jar, dependsOn: ‘copyAssets‘) {34     from fileTree(dir: ‘build/intermediates/classes/release‘)35     archiveName = ‘gp_android_sdk_unproguard.jar‘36 }37 38 task progJar(type: proguard.gradle.ProGuardTask, dependsOn: genJar) {39     outjars ‘build/gp_android_sdk.jar‘40     libraryjars System.getenv("ANDROID_HOME")+"/platforms/android-19/android.jar"41 42     // 具體需要keep住的類43     configuration ‘sdk_proguard.pro‘44 }45 46 task deleteOldJar(dependsOn: ‘progJar‘) {47     delete ‘../app/libs/gp_android_sdk.jar‘48 }49 50 task copyJar(type: Copy, dependsOn: ‘deleteOldJar‘) {51     from ‘build/gp_android_sdk.jar‘52     into ‘../app/libs‘53 }54 55 task sdk(dependsOn: ‘copyJar‘) {56 }

 

 

 

Android下gradle編譯代碼及混淆

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.