Android軟件中g(shù)radle的配置

gradle.png

1.構(gòu)建Android應(yīng)用程序的Gradle挚躯。
1.1 使用Gradle Android應(yīng)用程序。
默認(rèn)情況下,Android項目由Gradle構(gòu)建系統(tǒng)處理。如果你在Android studio中創(chuàng)建一個新項目应闯,則會自動創(chuàng)建Gradle構(gòu)建腳本。Android Studio提供了Gradle運行時挂捻,因此不需要額外的安裝碉纺。

如果你按下Android Studio中的run按鈕,則會觸發(fā)相應(yīng)的Gradle任務(wù)并啟動應(yīng)用程序刻撒。

你也可以通過命令行運行Gradle骨田。為了避免不必要的本地安裝,Gradle提供了一個包裝器腳本疫赎,允許您在沒有任何本地安裝的情況下運行Gradle。

1.2 從源代碼到Android應(yīng)用程序的轉(zhuǎn)換過程碎节。
Java源代碼文件由Java編譯器轉(zhuǎn)換為Java類文件捧搞。Android SDK包含一個名為dx的工具,它將Java類文件轉(zhuǎn)換為.dex(Dalvik Executable)文件狮荔。應(yīng)用程序的所有類文件都放在此.dex文件中胎撇。在此轉(zhuǎn)換過程中,類文件中的冗余信息在.dex文件中進行優(yōu)化殖氏。例如晚树,如果String在不同的類文件中找到相同的文件,則.dex文件只包含一個引用String雅采。

因此爵憎,這些.dex文件的大小要比相應(yīng)的類文件小得多。

該.DEX文件和其他資源婚瓜,例如圖像和XML文件宝鼓,被打包成一個apk文件(Android Package的)文件。程序aapt(Android資產(chǎn)打包工具)執(zhí)行此步驟巴刻。

所得的.apk文件包含運行Android應(yīng)用程序的所有必要數(shù)據(jù)愚铡,并可通過adb工具部署到Android設(shè)備。

從Android 5.0起胡陪,Android RunTime(ART)被用作所有Android應(yīng)用的運行時沥寥。ART采用“時尚之都”和“時尚_匯編”的組合。在Android設(shè)備上安裝應(yīng)用程序期間柠座,將應(yīng)用程序代碼轉(zhuǎn)換為機器代碼邑雅。

該dex2oat工具使用Android工具鏈創(chuàng)建的.dex文件,并將其編譯為可執(zhí)行和可鏈接格式(ELF文件)妈经。該文件包含dex代碼蒂阱,編譯的本地代碼和元數(shù)據(jù)锻全。保持.dex代碼允許現(xiàn)有的工具仍然可以工作。

1.3 在命令行中使用Gradle录煤。
Gradle構(gòu)建系統(tǒng)旨在支持創(chuàng)建Android應(yīng)用程序時的復(fù)雜場景:

1)多分銷:同一應(yīng)用程序必須為幾個客戶或公司定制
2)Multi-apk:支持為不同設(shè)備類型創(chuàng)建多個apk鳄厌,同時重用部分代碼

你可以通過命令行啟動Gradle構(gòu)建。以下是Android Gradle重要任務(wù)的概述:
表1. Android Gradle構(gòu)建目標(biāo)

命令  描述
./gradlew build
構(gòu)建項目妈踊,運行組合和檢查任務(wù)
./gradlew clean build
從零開始構(gòu)建項目
./gradlew clean build
從零開始構(gòu)建項目
./gradlew test
運行測試
./gradlew connectedAndroidTest
運行儀器測試

要查看所有可用任務(wù)了嚎,請使用gradlew wrapper命令。

gradle build
# alternatively speedup second grandle build by holding it in memory
# gradle build --daemon

此命令將創(chuàng)建構(gòu)建文件夾中的搖籃構(gòu)建的輸出廊营。默認(rèn)情況下歪泳,Gradle構(gòu)建在build / outputs / apk文件夾中創(chuàng)建兩個.apk文件。
要在JVM上構(gòu)建和啟動單元測試露筒,請使用以下命令呐伞。

gradle test

此命令將創(chuàng)建構(gòu)建文件夾中的搖籃構(gòu)建的輸出。默認(rèn)情況下慎式,Gradle構(gòu)建在build / outputs / apk文件夾中創(chuàng)建兩個.apk文件伶氢。
要在JVM上構(gòu)建和啟動單元測試,請使用以下命令瘪吏。

gradle connectedCheck

要在Android設(shè)備上構(gòu)建和啟動儀器化測試癣防,請使用以下命令。

gradle connectedCheck

1.4 通過資源縮小來刪除未使用的資源和Java類掌眠。
用于Android的Gradle構(gòu)建系統(tǒng)支持在構(gòu)建時縮小資源蕾盯。這將自動從打包的應(yīng)用程序中刪除未使用的資源。除此之外蓝丙,還可以從你所依賴的庫中刪除不必要的資源级遭。這可以大大減少你的應(yīng)用程序的大小。
要使資源縮小渺尘,請更新你的構(gòu)建文件装畅,類似于以下代碼段。

android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

1.5 定義依賴關(guān)系并保留外部版本沧烈。
一個很好的做法是在依賴關(guān)系之外定義庫依賴的版本掠兄,以便更好的維護。

ext {
    // App dependencies
    junitVersion = '4.12'
    mockitoVersion = '1.10.19'
    powerMockito = '1.6.2'
    hamcrestVersion = '1.3'
}

dependencies {
    // Dependencies for local unit tests
    testCompile "junit:junit:$junitVersion"
    testCompile "org.mockito:mockito-all:$mockitoVersion"
    testCompile "org.hamcrest:hamcrest-all:$hamcrestVersion"
    testCompile "org.powermock:powermock-module-junit4:$powerMockito"
    testCompile "org.powermock:powermock-api-mockito:$ext.powerMockito"
}

2.1 構(gòu)建類型并構(gòu)建風(fēng)格锌雀。
Android默認(rèn)使用兩種構(gòu)建類型:調(diào)試和釋放蚂夕。對于這些構(gòu)建類型腋逆,你可以在Gradle構(gòu)建中創(chuàng)建不同的風(fēng)格婿牍。
Gradle構(gòu)建系統(tǒng)還能夠管理不同風(fēng)格的應(yīng)用程序。產(chǎn)品風(fēng)味定義了應(yīng)用程序的定制版本惩歉。這允許代碼庫的某些部分或資源對于應(yīng)用程序的變體而有所不同等脂。
例如俏蛮,你可以為某些設(shè)備類別(如手機或平板電腦)定義不同的構(gòu)建版本。另一個用例可能是您的應(yīng)用的付費或免費版本上遥〔迹或者您想在測試運行期間使用不同的資源或類。

2.2 在你的Gradle構(gòu)建文件中定義產(chǎn)品風(fēng)格粉楚。
你可以使用 productFlavors關(guān)閉app / build.gradle文件來定義產(chǎn)品的不同變體辣恋。

productFlavors {
    prod {
        applicationId = "com.vogella.android.gradlebuildflavors.prod"
        versionName = "1.0-paid"
    }

    mock {
        applicationId = "com.vogella.android.gradlebuildflavors.mock"
        versionName = "1.0-free"
    }
}

整個build.gradle文件可能如下所示:

apply plugin: 'com.android.application'

android {
    //  ....

    productFlavors {
        prod {
            applicationId = "com.vogella.android.gradlebuildflavors.prod"
            versionName = "1.0-paid"
        }

        mock {
            applicationId = "com.vogella.android.gradlebuildflavors.mock"
            versionName = "1.0-free"
        }
    }
}

// ...

定義這些flavor之后,您可以在Android Studio 的“ 構(gòu)建變體”視圖中選擇它們模软。

1.PNG

2.3 為flavor提供不同的資源
為了為某種風(fēng)格定義不同的行為伟骨,您需要為app / src /下定義的風(fēng)格創(chuàng)建合適的文件夾。
風(fēng)味特定資源將覆蓋主要資源燃异。例如携狭,如果您在一個風(fēng)味中提供了不同的應(yīng)用程序圖標(biāo),Android構(gòu)建系統(tǒng)就會獲得特定的風(fēng)格回俐。

2.4 為 app的flavor提供不同的來源集逛腿。
src /文件夾中的目錄稱為源集。每個產(chǎn)品的味道都可以定義自己的源集鲫剿。
代碼文件不被替換為資源鳄逾,它們被組合稻轨。例如灵莲,你不能com.example.MainActivity在你的app / main / java /文件夾中有一個 活動,另外一個不同的實現(xiàn)是另外一種殴俱。如果您嘗試這樣做政冻,您將收到有關(guān)重復(fù)類定義的錯誤消息。
您仍然可以通過避免在主源文件夾中創(chuàng)建類來提供不同的實現(xiàn)线欲,而在每種風(fēng)格中創(chuàng)建一個類明场。

3.可選練習(xí):為應(yīng)用程序使用不同的產(chǎn)品風(fēng)格。
在本練習(xí)中李丰,您將創(chuàng)建一個具有兩種不同項目風(fēng)格的Android應(yīng)用程序苦锨,稱為prod和mock。
模擬版本定義與prod版本不同的資源趴泌。在第一個示例中舟舒, folder/project的strings.xml文件被覆蓋。構(gòu)建變體是通過Build Variants view定義的嗜憔。

3.1 創(chuàng)建一個新的Android應(yīng)用程序秃励。
使用Empty Activity模板和頂級包創(chuàng)建一個新項目com.vogella.android.gradlebuildflavors
app / build.gradle文件中定義兩個額外的產(chǎn)品flavor吉捶,稱為“prod”和“mock”夺鲜。

apply plugin: 'com.android.application'

android {
  //...

    productFlavors {
        prod {
            applicationId = "com.vogella.android.gradlebuildflavors.prod"
            versionName = "1.0-paid"
        }

        mock {
            applicationId = "com.vogella.android.gradlebuildflavors.mock"
            versionName = "1.0-free"
        }
    }
}

為產(chǎn)品和模擬flavors創(chuàng)建所需的文件夾結(jié)構(gòu)皆尔。


2.PNG

將strings.xml從主文件夾復(fù)制到flavor的相應(yīng)文件夾。

hello_worldstrings.xml的字符串更改為Mock World币励!和產(chǎn)世界慷蠕!So....

<resources>
    <string name="app_name">Flavor</string>
    <string name="hello_world">Mock World! </string>
</resources>
<resources>
    <string name="app_name">Flavor</string>
    <string name="hello_world">Prod World! </string>
</resources>
...1.PNG

3.2 驗證
在Android Studio 的Build Variants view中選擇mockDebug“ 構(gòu)建變體”,并運行你的應(yīng)用程序榄审。

....PNG

如果你啟動應(yīng)用程序砌们,你應(yīng)該看到從模擬的flavor的string。現(xiàn)在選擇你的flavor 啟動它搁进,你應(yīng)該看到另一個string浪感。

3.3 通過Gradle命令行構(gòu)建
使用該./gradlew build命令構(gòu)建您的所有產(chǎn)品flavor。

3.4 準(zhǔn)備您的應(yīng)用程序測試與Gradle flavor饼问。
ShareIntentBuilder通過使用以下代碼的靜態(tài)方法創(chuàng)建一個通過“share intent”啟動活動的類影兽。

import android.content.Context;
import android.content.Intent;

public class ShareIntentBuilder {

    public static void startSendActivity(Context context, String title, String body) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TITLE, title);
        intent.putExtra(Intent.EXTRA_TEXT, body);
        intent.setType("text/plain");
        Intent chooserIntent = Intent.createChooser(intent, context.getResources().getText(R.string.share));
        chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(chooserIntent);
    }

3.5 為您的口味實現(xiàn)不同的MainActivity版本。
允許觸發(fā)此意圖的活動在您的“mock” flavor中被替換莱革。如果選擇了“mock”峻堰,則在應(yīng)用程序中啟動顯示發(fā)送數(shù)據(jù)的第二個活動。如果選擇flavor “prod”盅视,則發(fā)送shared intent捐名。

  1. 自定義Gradle構(gòu)建
    4.1 重命名輸出apk。
apply plugin: 'com.android.application'

android {
    // more
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
       applicationVariants.all { variant ->
           variant.outputs.each { output ->
               def file = output.outputFile
               def filename = file.name.replace("app", "lars")
               output.outputFile = new File(file.parent, filename)

           }
       }
// more
}

4.2 為調(diào)試版本指定不同的密鑰庫闹击。
您可以在build.gradle文件中定義密鑰庫镶蹋。
例如,您可以重新定義調(diào)試變量的密鑰庫:

android {
    signingConfigs {
        debug {
            storeFile file("your.keystore")
        }
    }
}
  1. 將使用Eclipse創(chuàng)建的Android項目遷移到Gradle
    5.1 將基于Eclipse的Android項目導(dǎo)入到Android Studio中赏半。
    Android項目有兩種不同的配置贺归。第一套項目使用Eclipse ADT工具使用的遺留項目結(jié)構(gòu),直到2013年使用断箫。第二套項目使用新的Gradle構(gòu)建結(jié)構(gòu)拂酣。Gradle可以配置為支持兩種格式,Eclipse項目結(jié)構(gòu)和Gradle項目結(jié)構(gòu)仲义。

一旦你添加一個有效的Gradle 文件到你的基于Eclipse的Android項目婶熬,你可以將其導(dǎo)入到Android Studio中,通過File Import Project埃撵,并通過與Gradle 中選擇項目文件夾中建立文件赵颅。

5.2 為您的基于Eclipse的Android項目添加一個Gradle文件。
要啟用基于Eclipse的Android項目的Gradle構(gòu)建盯另,將以下build.gradle添加到項目的根目錄中性含。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-beta3'
    }
}
apply plugin: 'com.android.application'


android {
     lintOptions {
          abortOnError false
      }

    compileSdkVersion 22
    buildToolsVersion "21.1.2"

        defaultConfig {
            targetSdkVersion 22
        }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

      
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

1.構(gòu)建Android應(yīng)用程序的Gradle。
1.1 使用Gradle Android應(yīng)用程序鸳惯。
默認(rèn)情況下商蕴,Android項目由Gradle構(gòu)建系統(tǒng)處理叠萍。如果你在Android studio中創(chuàng)建一個新項目,則會自動創(chuàng)建Gradle構(gòu)建腳本绪商。Android Studio提供了Gradle運行時苛谷,因此不需要額外的安裝。

如果你按下Android Studio中的run按鈕格郁,則會觸發(fā)相應(yīng)的Gradle任務(wù)并啟動應(yīng)用程序腹殿。

你也可以通過命令行運行Gradle。為了避免不必要的本地安裝例书,Gradle提供了一個包裝器腳本锣尉,允許您在沒有任何本地安裝的情況下運行Gradle。

1.2 從源代碼到Android應(yīng)用程序的轉(zhuǎn)換過程决采。
Java源代碼文件由Java編譯器轉(zhuǎn)換為Java類文件自沧。Android SDK包含一個名為dx的工具,它將Java類文件轉(zhuǎn)換為.dex(Dalvik Executable)文件树瞭。應(yīng)用程序的所有類文件都放在此.dex文件中拇厢。在此轉(zhuǎn)換過程中,類文件中的冗余信息在.dex文件中進行優(yōu)化晒喷。例如孝偎,如果String在不同的類文件中找到相同的文件,則.dex文件只包含一個引用String凉敲。

因此衣盾,這些.dex文件的大小要比相應(yīng)的類文件小得多。

該.DEX文件和其他資源荡陷,例如圖像和XML文件雨效,被打包成一個apk文件(Android Package的)文件迅涮。程序aapt(Android資產(chǎn)打包工具)執(zhí)行此步驟废赞。

所得的```.apk````文件包含運行Android應(yīng)用程序的所有必要數(shù)據(jù),并可通過adb工具部署到Android設(shè)備叮姑。

從Android 5.0起唉地,Android RunTime(ART)被用作所有Android應(yīng)用的運行時。ART采用“時尚之都”和“時尚_匯編”的組合传透。在Android設(shè)備上安裝應(yīng)用程序期間耘沼,將應(yīng)用程序代碼轉(zhuǎn)換為機器代碼。

該dex2oat工具使用Android工具鏈創(chuàng)建的.dex文件朱盐,并將其編譯為可執(zhí)行和可鏈接格式(ELF文件)群嗤。該文件包含dex代碼,編譯的本地代碼和元數(shù)據(jù)兵琳。保持.dex代碼允許現(xiàn)有的工具仍然可以工作狂秘。

1.3 在命令行中使用Gradle骇径。
Gradle構(gòu)建系統(tǒng)旨在支持創(chuàng)建Android應(yīng)用程序時的復(fù)雜場景:

1)多分銷:同一應(yīng)用程序必須為幾個客戶或公司定制
2)Multi-apk:支持為不同設(shè)備類型創(chuàng)建多個apk,同時重用部分代碼

你可以通過命令行啟動Gradle構(gòu)建者春。以下是Android Gradle重要任務(wù)的概述:
表1. Android Gradle構(gòu)建目標(biāo)

命令  描述
./gradlew build
構(gòu)建項目破衔,運行組合和檢查任務(wù)
./gradlew clean build
從零開始構(gòu)建項目
./gradlew clean build
從零開始構(gòu)建項目
./gradlew test
運行測試
./gradlew connectedAndroidTest
運行儀器測試

要查看所有可用任務(wù),請使用gradlew wrapper命令钱烟。

gradle build
# alternatively speedup second grandle build by holding it in memory
# gradle build --daemon

此命令將創(chuàng)建構(gòu)建文件夾中的搖籃構(gòu)建的輸出晰筛。默認(rèn)情況下,Gradle構(gòu)建在build / outputs / apk文件夾中創(chuàng)建兩個.apk文件拴袭。
要在JVM上構(gòu)建和啟動單元測試读第,請使用以下命令。

gradle test

此命令將創(chuàng)建構(gòu)建文件夾中的搖籃構(gòu)建的輸出拥刻。默認(rèn)情況下卦方,Gradle構(gòu)建在build / outputs / apk文件夾中創(chuàng)建兩個.apk文件。
要在JVM上構(gòu)建和啟動單元測試泰佳,請使用以下命令盼砍。

gradle connectedCheck

要在Android設(shè)備上構(gòu)建和啟動儀器化測試,請使用以下命令逝她。

gradle connectedCheck

1.4 通過資源縮小來刪除未使用的資源和Java類浇坐。
用于Android的Gradle構(gòu)建系統(tǒng)支持在構(gòu)建時縮小資源。這將自動從打包的應(yīng)用程序中刪除未使用的資源黔宛。除此之外近刘,還可以從你所依賴的庫中刪除不必要的資源。這可以大大減少你的應(yīng)用程序的大小臀晃。
要使資源縮小觉渴,請更新你的構(gòu)建文件,類似于以下代碼段徽惋。

android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

1.5 定義依賴關(guān)系并保留外部版本案淋。
一個很好的做法是在依賴關(guān)系之外定義庫依賴的版本,以便更好的維護险绘。

ext {
    // App 依賴
    junitVersion = '4.12'
    mockitoVersion = '1.10.19'
    powerMockito = '1.6.2'
    hamcrestVersion = '1.3'
}

dependencies {
    // 單元測試依靠
    testCompile "junit:junit:$junitVersion"
    testCompile "org.mockito:mockito-all:$mockitoVersion"
    testCompile "org.hamcrest:hamcrest-all:$hamcrestVersion"
    testCompile "org.powermock:powermock-module-junit4:$powerMockito"
    testCompile "org.powermock:powermock-api-mockito:$ext.powerMockito"
}

2.1 構(gòu)建類型并構(gòu)建風(fēng)格踢京。
Android默認(rèn)使用兩種構(gòu)建類型:調(diào)試和釋放。對于這些構(gòu)建類型宦棺,你可以在Gradle構(gòu)建中創(chuàng)建不同的風(fēng)格瓣距。
Gradle構(gòu)建系統(tǒng)還能夠管理不同風(fēng)格的應(yīng)用程序。產(chǎn)品風(fēng)味定義了應(yīng)用程序的定制版本代咸。這允許代碼庫的某些部分或資源對于應(yīng)用程序的變體而有所不同蹈丸。
例如,你可以為某些設(shè)備類別(如手機或平板電腦)定義不同的構(gòu)建版本。另一個用例可能是您的應(yīng)用的付費或免費版本逻杖】或者您想在測試運行期間使用不同的資源或類。

2.2 在你的Gradle構(gòu)建文件中定義產(chǎn)品風(fēng)格弧腥。
你可以使用 productFlavors關(guān)閉app / build.gradle文件來定義產(chǎn)品的不同變體厦取。

productFlavors {
    prod {
        applicationId = "com.vogella.android.gradlebuildflavors.prod"
        versionName = "1.0-paid"
    }

    mock {
        applicationId = "com.vogella.android.gradlebuildflavors.mock"
        versionName = "1.0-free"
    }
}

整個build.gradle文件可能如下所示:

apply plugin: 'com.android.application'

android {
    //  ....

    productFlavors {
        prod {
            applicationId = "com.sangmsen.android.gradlebuildflavors.prod"
            versionName = "1.0-paid"
        }

        mock {
            applicationId = "com.sangmesen.android.gradlebuildflavors.mock"
            versionName = "1.0-free"
        }
    }
}

// ...

定義這些flavor之后,您可以在Android Studio 的“ 構(gòu)建變體”視圖中選擇它們管搪。

1.PNG

2.3 為flavor提供不同的資源
為了為某種風(fēng)格定義不同的行為虾攻,您需要為app / src /下定義的風(fēng)格創(chuàng)建合適的文件夾。
flavor特定資源將覆蓋主要資源更鲁。例如霎箍,如果你在一個風(fēng)味中提供了不同的應(yīng)用程序圖標(biāo),Android構(gòu)建系統(tǒng)就會獲得特定的風(fēng)格。

2.4 為 app的flavor提供不同的來源集。
src /文件夾中的目錄稱為源集诸典。每個產(chǎn)品的flavor都可以定義自己的源集。
代碼文件不被替換為資源顶别,它們被組合。例如拒啰,你不能com.example.MainActivity在你的app / main / java /文件夾中有一個 活動驯绎,另外一個不同的實現(xiàn)是另外一種。如果您嘗試這樣做谋旦,你將收到有關(guān)重復(fù)類定義的錯誤消息剩失。
你仍然可以通過避免在主源文件夾中創(chuàng)建類來提供不同的實現(xiàn),而在每種風(fēng)格中創(chuàng)建一個類册着。

3.可選練習(xí):為應(yīng)用程序使用不同的產(chǎn)品風(fēng)格拴孤。
在本練習(xí)中,您將創(chuàng)建一個具有兩種不同項目風(fēng)格的Android應(yīng)用程序甲捏,稱為prod和mock演熟。
模擬版本定義與prod版本不同的資源。在第一個示例中摊鸡, folder/project的strings.xml文件被覆蓋绽媒。構(gòu)建變體是通過Build Variants view定義的蚕冬。

3.1 創(chuàng)建一個新的Android應(yīng)用程序免猾。
使用Empty Activity模板和頂級包創(chuàng)建一個新項目com.sangmsen.android.gradlebuildflavors
app / build.gradle文件中定義兩個額外的產(chǎn)品flavor囤热,稱為“prod”和“mock”猎提。

apply plugin: 'com.android.application'

android {
  //...

    productFlavors {
        prod {
            applicationId = "com.sangmsen.android.gradlebuildflavors.prod"
            versionName = "1.0-paid"
        }

        mock {
            applicationId = "com.sangmsen.android.gradlebuildflavors.mock"
            versionName = "1.0-free"
        }
    }
}

為產(chǎn)品和模擬flavors創(chuàng)建所需的文件夾結(jié)構(gòu)。


2.PNG

將strings.xml從主文件夾復(fù)制到flavor的相應(yīng)文件夾。

hello_worldstrings.xml的字符串更改為Mock World锨苏!和產(chǎn)世界疙教!So....

<resources>
    <string name="app_name">Flavor</string>
    <string name="hello_world">Mock World! </string>
</resources>
<resources>
    <string name="app_name">Flavor</string>
    <string name="hello_world">Prod World! </string>
</resources>
...1.PNG

3.2 驗證
在Android Studio 的Build Variants view中選擇mockDebug“ 構(gòu)建變體”,并運行你的應(yīng)用程序伞租。

....PNG

如果你啟動應(yīng)用程序贞谓,你應(yīng)該看到從模擬的flavor的string。現(xiàn)在選擇你的flavor 啟動它葵诈,你應(yīng)該看到另一個字符串裸弦。

3.3 通過Gradle命令行構(gòu)建
使用該./gradlew build命令構(gòu)建您的所有產(chǎn)品口味。

3.4 準(zhǔn)備您的應(yīng)用程序測試與Gradle flavor作喘。
ShareIntentBuilder通過使用以下代碼的靜態(tài)方法創(chuàng)建一個通過“share intent”啟動活動的類理疙。

import android.content.Context;
import android.content.Intent;

public class ShareIntentBuilder {

    public static void startSendActivity(Context context, String title, String body) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TITLE, title);
        intent.putExtra(Intent.EXTRA_TEXT, body);
        intent.setType("text/plain");
        Intent chooserIntent = Intent.createChooser(intent, context.getResources().getText(R.string.share));
        chooserIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(chooserIntent);
    }

3.5 為您的口味實現(xiàn)不同的MainActivity版本。
允許觸發(fā)此意圖的活動在您的“mock” flavor中被替換泞坦。如果選擇了“mock”窖贤,則在應(yīng)用程序中啟動顯示發(fā)送數(shù)據(jù)的第二個活動。如果選擇flavor “prod”贰锁,則發(fā)送shared intent赃梧。

  1. 自定義Gradle構(gòu)建
    4.1 重命名輸出apk。
apply plugin: 'com.android.application'

android {
    // more
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
       applicationVariants.all { variant ->
           variant.outputs.each { output ->
               def file = output.outputFile
               def filename = file.name.replace("app", "lars")
               output.outputFile = new File(file.parent, filename)

           }
       }
// more
}

4.2 為調(diào)試版本指定不同的密鑰庫豌熄。
您可以在build.gradle文件中定義密鑰庫槽奕。
例如,您可以重新定義調(diào)試變量的密鑰庫:

android {
    signingConfigs {
        debug {
            storeFile file("your.keystore")
        }
    }
}
  1. 將使用Eclipse創(chuàng)建的Android項目遷移到Gradle
    5.1 將基于Eclipse的Android項目導(dǎo)入到Android Studio中房轿。
    Android項目有兩種不同的配置粤攒。第一套項目使用Eclipse ADT工具使用的遺留項目結(jié)構(gòu),直到2013年使用囱持。第二套項目使用新的Gradle構(gòu)建結(jié)構(gòu)夯接。Gradle可以配置為支持兩種格式,Eclipse項目結(jié)構(gòu)和Gradle項目結(jié)構(gòu)纷妆。

一旦你添加一個有效的Gradle 文件到你的基于Eclipse的Android項目盔几,你可以將其導(dǎo)入到Android Studio中,通過File Import Project掩幢,并通過與Gradle 中選擇項目文件夾中建立文件逊拍。

5.2 為您的基于Eclipse的Android項目添加一個Gradle文件。
要啟用基于Eclipse的Android項目的Gradle構(gòu)建际邻,將以下build.gradle添加到項目的根目錄中芯丧。

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0-beta3'
    }
}
apply plugin: 'com.android.application'


android {
     lintOptions {
          abortOnError false
      }

    compileSdkVersion 22
    buildToolsVersion "21.1.2"

        defaultConfig {
            targetSdkVersion 22
        }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

      
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市世曾,隨后出現(xiàn)的幾起案子缨恒,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骗露,死亡現(xiàn)場離奇詭異岭佳,居然都是意外死亡,警方通過查閱死者的電腦和手機萧锉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門珊随,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柿隙,你說我怎么就攤上這事玫恳。” “怎么了优俘?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵京办,是天一觀的道長。 經(jīng)常有香客問我帆焕,道長惭婿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任叶雹,我火速辦了婚禮财饥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘折晦。我一直安慰自己钥星,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布满着。 她就那樣靜靜地躺著谦炒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪风喇。 梳的紋絲不亂的頭發(fā)上宁改,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機與錄音魂莫,去河邊找鬼还蹲。 笑死,一個胖子當(dāng)著我的面吹牛耙考,可吹牛的內(nèi)容都是我干的谜喊。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼倦始,長吁一口氣:“原來是場噩夢啊……” “哼斗遏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起楣号,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤最易,失蹤者是張志新(化名)和其女友劉穎怒坯,沒想到半個月后炫狱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藻懒,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年视译,在試婚紗的時候發(fā)現(xiàn)自己被綠了嬉荆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡酷含,死狀恐怖鄙早,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情椅亚,我是刑警寧澤限番,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站呀舔,受9級特大地震影響弥虐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜媚赖,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一霜瘪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惧磺,春花似錦颖对、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至番捂,卻和暖如春训堆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背白嘁。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工坑鱼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人絮缅。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓鲁沥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親耕魄。 傳聞我的和親對象是個殘疾皇子画恰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容