Android官方技術文檔翻譯——Apk 拆分機制,androidapk

來源:互聯網
上載者:User

Android官方技術文檔翻譯——Apk 拆分機制,androidapk

本文譯自androd官方技術文檔《Apk Splits》,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits。

本文地址:http://blog.csdn.net/maosidiaoxian/article/details/41692535。轉載請註明出處。翻譯如有錯訛,敬請指正。


Apk Splits

目錄

  1. 1簡介
  2. 2按螢幕密度拆分
  3. 3按 ABI 拆分
  4. Variant API &Version Code 支援
簡介拆分機制比起使用 flavors,能讓應用程式更有效地構建一些形式的多個apk。多 apk 只支援以下類型
  • 螢幕密度
  • ABI
使用新的拆分機制,構建同一個應用程式的hdpi版本和mdpi版本,能夠共用很多的任務 (如 javac,dx,proguard)。此外,它會被認為是一個單一的variant,並且同一個測試程式將會被用來測試每個多APK。
當在variant 上運行install或connectedCheck 任務時,Gradle 會自動匹配把正確的 APK 輸出到每一個串連的裝置中。
如果你也想做另一種類型的多 APK (這裡有定義: http://developer.android.com/google/play/publishing/multiple-apks.html) 你也可以建立 Flavors (基於 API 層級的多apk的執行個體),並且每個variant都會有它自己的多個輸出。按螢幕密度拆分android {  ...  splits {    density {      enable true      exclude "ldpi", "tvdpi", "xxxhdpi"      compatibleScreens 'small', 'normal', 'large', 'xlarge'    }  }
enable: 啟用螢幕密度拆分機制 exclude: 預設情況下所有螢幕密度都包括在內,你可以移除一些密度。 include: 表示要包括哪些螢幕密度 reset(): 重設螢幕密度列表為只包含一個Null 字元串 (這能夠實現,在與 include一起使用時可以表示使用哪一個螢幕密度,而不是要忽略哪一些螢幕密度) compatibleScreens:表示相容螢幕的列表。這將會注入到manifest中匹配的 <compatible-screens> <screen> 節點。這個設定是可選的。
請注意這也總是會產生包含所有螢幕密度的通用的 APK。
樣本: densitySplit按 ABI 拆分android {  ...  splits {    abi {      enable true      reset()      include 'x86', 'armeabi-v7a', 'mips'      universalApk true    }  }}
enable: 啟用ABI拆分機制 exclude: 預設情況下所有ABI都包括在內,你可以移除一些ABI。 include:指明要包含哪些ABI reset():重設ABI列表為只包含一個Null 字元串(這可以實現,在與 include一起使用來可以表示要使用哪一個ABI,而不是要忽略哪一些ABI) universalApk:指示是否打包一個通用版本(包含所有的ABI)。預設值為 false。
樣本: ndkSanAngelesVariant API &Version Code 支援關於過時的API的警告: 當前的variant API 中所包含的一些方法,已經被移到它的outputs對象裡。該方法仍然存在,但如果有2個以上的output將會構建失敗。它們將在1.0版本完全刪除它們是:
  • get/setOutputFile
  • getProcessResources
  • getProcessManifest
  • getPackageApplication/Library
  • getZipAlign
在 VariantOutput 上新增的方法
  • String getAbiFilter()
  • String getDensityFilter()
  • Task getAssemble()
  • String getName()
  • String getBaseName()
  • String getDirName
  • set/getVersionOverride // 可選的 versionCode 重寫
  • int getVersionCode()//返回從output重寫的versionCode,或者是variant自己的versioncode

每個產生的 APK 必須具有不同的 versionCode。類似於遍曆variants去設定 versionCode,你可以在遍曆 variant 的outputs,並設定它的 versionCodeOverride。
// map for the version codeext.versionCodes = ['armeabi-v7a':1, mips:2, x86:3]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->    // assign different version code for each output    variant.outputs.each { output ->        output.versionCodeOverride =            project.ext.versionCodes.get(output.getFilter(OutputFile.ABI)) * 1000000 + android.defaultConfig.versionCode    }}
如果你 flavors 和 splits兩個都用了,用於輸出多apk,你還是應該使用 VariantOutput.setVersionCodeOverride(int),但你應該計算split資訊(densityFilter 和abiFilter) 和variant 資訊裡的versionCode。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.