標籤:意義 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多渠道構建