Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android官方技術文檔翻譯——Apk 拆分機制

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

編輯:關於Android編程

 

 

Apk Splits

目錄

  1. 1簡介
  2. 2按屏幕密度拆分
  3. 3按 ABI 拆分
  4. 4 Variant API &Version Code 支持

    簡介

    拆分機制比起使用 flavors,能讓應用程序更有效地構建一些形式的多個apk。 多 apk 只支持以下類型
  5. 屏幕密度
  6. 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(): 重置屏幕密度列表為只包含一個空字符串 (這能夠實現,在與include一起使用時可以表示使用哪一個屏幕密度,而不是要忽略哪一些屏幕密度) compatibleScreens:表示兼容屏幕的列表。這將會注入到manifest中匹配的 節點。這個設置是可選的。
    請注意這也總是會生成包含所有屏幕密度的通用的 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列表為只包含一個空字符串(這可以實現,在與include一起使用來可以表示要使用哪一個ABI,而不是要忽略哪一些ABI) universalApk:指示是否打包一個通用版本(包含所有的ABI)。默認值為 false。
    示例: ndkSanAngeles

    Variant API &Version Code 支持

    關於過時的API的警告: 當前的variant API 中所包含的一些方法,已經被移到它的outputs對象裡。該方法仍然存在,但如果有2個以上的output將會構建失敗。它們將在1.0版本完全刪除 它們是:
  7. get/setOutputFile
  8. getProcessResources
  9. getProcessManifest
  10. getPackageApplication/Library
  11. getZipAlign 在 VariantOutput 上新增的方法
  12. String getAbiFilter()
  13. String getDensityFilter()
  14. Task getAssemble()
  15. String getName()
  16. String getBaseName()
  17. String getDirName
  18. set/getVersionOverride // 可選的 versionCode 重寫
  19. int getVersionCode()//返回從output重寫的versionCode,或者是variant自己的versioncode
    每個生成的 APK 必須具有不同的 versionCode。類似於遍歷variants去設置 versionCode,你可以在遍歷 variant 的outputs,並設置它的 versionCodeOverride。
    // map for the version code ext.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。

     

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved