《Gradle權威指南》--Android Gradle多渠道構建

來源:互聯網
上載者:User

標籤:意義   nal   效率   release   oid   alt   get   x86   美團   

No1:

Build Variant = Build Type + Product Flavor

Build Variant:構建的產物

Build Type:構建的類型

Product Flavor:構建的渠道

android{    compileSdkVersion 23    buildToolsVersion "23.0.1"    productFlavors{        google{}        baidu{}    }}

No2:

Flurry多渠道和友盟多渠道構建

Flurry本身沒有渠道的概念,它有Application,所以可以把一個Application當成一個渠道,每個Application都有一個Key,稱為Flurry Key;友盟本身有渠道的概念,只要我們在AndroidManifest.xml配置標註即可。

android{    compileSdkVersion 23    buildToolsVersion "23.0.1"        defaultConfig{        applicationId "org.flysnow.app.example112"        minSdkVersion 14        targetSdkVersion 23        versionCode 1        versionName ‘1.0.0‘        resConfig ‘zh‘    }    buildTypes{        release{            minifyEnabled true            projuardFiles getDefaultProguardFile(‘proguard-android.txt‘),‘proguard-rules.pro‘            zipAlignEnabled true        }    }    productFlavors{        google{            buildConfigField ‘String‘,‘FLURRY_KEY‘,‘"BHJKOUASDASFKLZL"‘        }        baidu{            buildConfigField ‘String‘,‘FLURRY_KEY‘,‘"HJSDKHFJDSF23478"‘        }    }}

這樣每個渠道的BuildConfig類中都會有名字為FLURRY_KEY常量定義

友盟渠道是在AndroidManifest.xml中配置的

<meta-data android :value="Channel ID" android:name="UMENG_CHANNEL"/>

其中Channel ID就是渠道值

No3:

多渠道構建定製--其實就是對Android Gradle外掛程式的ProductFlavor的配置,通過配置ProductFlavor達到靈活地控制每個渠道的目的

applicationId就是該渠道的包名

android{    ...    productFlavors{        google{            applicationId "org.flysnow.app.example112.google"        }    }}

consumerProguardFiles--只對Android庫項目有用

android{    productFlavors{        google{            consumerProguardFiles ‘proguard-rules.pro‘,‘proguard-android.txt‘        }    }}

testApplicationId--測試包名

android{    ...    productFlavors{        google{            testApplicationId "org.flysnow.app.example112.test"        }    }}

testFunctionalTest--是否為功能測試,testHandleProfiling--是否啟用分析功能

android{    productFlavors{        google{            testFunctionalTest true            testHandleProfiling true        }    }}

testInstrumentationRunner--用來配置運行測試使用的Instrumentation Runner的類名

android{    productFlavors{        google{            testInstrumentationRunner ‘android.test.InstrumentationTestRunner‘        }    }}

testInstrumentationRunnerArguments--用來配置Instrumentation Runner使用的參數

android{    productFlavors{        google{            testInstrumentationRunnerArguments.put("coverage",‘true‘)        }    }}

useJack--用於標記是否啟用Jack和Jill這個全新的、高效能的編譯器

android{    productFlavors{        google{            useJact true        }    }}

dimension --多維度,理解為對ProdcutFlavor進行分組。用flavorDimensions聲明維度,才能在ProductFlavor中使用

android{    flavorDimensions "abi","version"//優先順序:abi>version>defaultConfig    productFlavors{        free{            dimension ‘version‘        }        paid{            dimension ‘version‘        }        x86{            dimension ‘abi‘        }        arm{            dimension ‘abi‘        }    }}

會產生

ArmFreeDebug

ArmFreeRelease

ArmPaidDebug

ArmPaidRelease

x86FreeDebug

x86FreeRelease

x86PaidDebug

x86PaidRelease

No4:

提高多渠道構建的效率-美團方案

1)利用Android Gradle打一個基本包

2)基於該包複製一個,檔案名稱要能區分出產品、打包時間、版本、渠道等

3)對複製出來的apk檔案進行修改,在其META-INF目錄下新增空檔案,但是空檔案的檔案名稱要有意義,必須包含能區分渠道的名字,如:mtchannel_google

4)重複步驟2)步驟3產生我們所需的所有渠道包apk,這個可以使用Python這類指令碼來做

5)產生了我們所有發布渠道的apk包

使用:

在apk啟動(Application onCreate)時候,讀取我們寫apk中META-INF目錄下的首碼mtchannel_檔案,如果找到的話,把檔案名稱取出來,然後就可以得到渠道標識(Google)了

《Gradle權威指南》--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.