Android官方技术文档翻译——Apk 拆分机制

本文译自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(): 重置屏幕密度列表为只包含一个空字符串 (这能够实现,在与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列表为只包含一个空字符串(这可以实现,在与include一起使用来可以表示要使用哪一个ABI,而不是要忽略哪一些ABI)

universalApk:指示是否打包一个通用版本(包含所有的ABI)。默认值为 false。

示例: ndkSanAngeles

Variant 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 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。

时间: 2024-10-03 23:14:57

Android官方技术文档翻译——Apk 拆分机制的相关文章

Android官方技术文档翻译——Gradle 插件用户指南(4)

近期赶项目,白天基本没时间,仅仅有晚上在家的时候才干看一看.昨天晚上仅仅翻译完了第四章,今天就仅仅发第四章吧. 本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide. 翻译不易.转载请注明CSDN博客上的出处: http://blog.csdn.net/maosidiaoxian/article/details/4195580

Android官方技术文档翻译——Gradle 插件用户指南(6)

没想到翻译这篇<Gradle 插件用户指南>拖了差不多一个月,还跨年了.不好还好,在2号时终于一口气把剩下的给翻译完了(其实那天剩下的也就不到一章). 今天先发一下第六章,明天再发第七章. 本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide. 翻译不易,转载请注明CSDN博客上的出处: http://blog.c

Android官方技术文档翻译——Gradle 插件用户指南(7)

本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide. 翻译不易,转载请注明CSDN博客上的出处: http://blog.csdn.net/maosidiaoxian/article/details/42417779 前三章见<Android官方技术文档翻译--Gradle 插件用户指南(1-3)>. 第四章见&

Android官方技术文档翻译——新构建系统概述

本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. 这篇文章从去年就开始翻译的了,无奈项目较赶我翻译的速度又慢,翻译期间Google官网又对它不断更新,以致拖到了现在.这一篇文档是对Android新构建系统的概述,列出了与它相关的一些文档,以及这个新构建系统的各版本更新日志.这个新的构建系统,其实也就是这个Gradle 上的 Android 插件,如果你的An

Android官方技术文档翻译——清单合并

本文译自Android官方技术文档<Manifest Merger>,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger. 翻译不易,转载请注明CSDN博客上的出处: http://blog.csdn.net/maosidiaoxian/article/details/42671999 翻译工作耗时费神,如果你觉得本文翻译得还OK,请点击文末的"顶":如有错讹

Android官方技术文档翻译——Gradle 插件用户指南(1-3)

不知道是什么网络问题,上午一直发不了博客,其它页面基本正常,就是在写博客这里,每次打开都是响应超时.刚才用了VPN,顺便试了一下,竟然能够编辑.想是CDN之类的问题吧. 这次翻译的是Gradle 插件用户指南,也就是Gradle上的Android插件的官方文档.文档非常长,加上近期激情不够,翻译得有些慢.到昨天为止,才译到第四章.今天先发前三章. 本文译自Android官方技术文档<Gradle Plugin User Guide>,原文地址:http://tools.android.com/

Android官方技术文档翻译—— Eclilpse项目迁移

本文译自Android官方技术文档<Migrating From Eclipse Projects>,原文地址:http://tools.android.com/tech-docs/new-build-system/migrating-from-eclipse-projects. 本篇文档介绍的是如何把一个Ecilpse上的Android项目,迁移到Android Studio.从Eclipse转Android Studio的同学可以看一下. 翻译不易,转载请注明CSDN博客上的出处: htt

Android官方技术文档翻译——迁移 Gradle 项目到1.0.0 版本

本文译自Android官方技术文档<Migrating Gradle Projects to version 1.0.0>,原文地址:http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0. 本篇文档介绍的是低版本的Gradle项目怎么升级到1.0.0版本. 翻译不易,转载请注明CSDN博客上的出处: http://blog.csdn.net/maosidiaoxian/article/details/427

Android官方技术文档翻译——IntelliJ 项目迁移

本文译自Android官方技术文档<Migrating from IntelliJ Projects>,原文地址:http://tools.android.com/tech-docs/new-build-system/migrating-from-intellij-projects. 上一篇介绍了如何上一篇介绍了如何把一个Eclipse上的Android项目迁移到 Android Studio,这一篇继续介绍对 IntelliJ项目的迁移. 翻译不易,转载请注明CSDN博客上的出处: http