一个应用程序,不同的 APK。 针对 Android(Go 版)设备和其他所有设备使用相同的应用,但是有不同的体验。...创建不同的 APK; 一个 APK 针对新的 android.hardware.ram.low 尺寸 vs APK(s)定位其他所有设备。 两个应用。...请记住已经宣布安全更新:发布到 Play 控制台的新应用需要在 2018 年 8 月 1 日之前至少定位到 API 26(Android 8.0)或更高版本,而现有/已发布应用的更新将需要在 2018...使用 Android App Bundle,您可以构建一个工程,其中应用程序包含已编译代码,资源和本地库。您不再需要为多个 APK 进行构建,签名,上传和管理版本代码。...您应该把它当作您的窗口,以确保您拥有一个用户,并且不要让他们有机会在他们的手机上安装您的应用后放弃您的应用。我们总是测量冷启动时间,因为这段时间是您的应用程序与用户充分交互。
回首 Android 的第一个十年 十年来,在 Android 上发布应用的流程如下: 第 1 步:在 IDE 中为您的应用编写代码,例如 Android Studio。...您可以在单个版本中为每个设备配置构建多个 APK。但当您想要针对不同屏幕尺寸和 CPU 架构进行优化,同时针对 32 位和 64 位时,情况很快就会失控——您最终可能会为每个版本构建数百个 APK。...第 6 步:在您的应用安装在设备上后,Play 也会根据需要提供额外的分拆 APK,例如,当用户更改设备语言或是想要使用动态功能时。更具体的细节将在稍后详述。 ?...Android App Bundle 是开源和向下兼容的 (对于 Android L 之前的版本,Play 会自动使用多 APK——即 Play 为每个设备配置生成一个 APK,包含所有语言资源,而不是使用分拆...需要销售功能的小部分用户群体 (即销售人员) 可以在需要时下载和访问这个功能。一些开发者还在探索动态功能,避免为仅仅是略有不同的用户群体提供为数过多的不同应用变体。
为符合 64 位要求做准备 我们预期对大多数开发者而言,转到 64 位应该非常简单,因为许多应用完全以非原生代码 (例如 Java 编程语言或 Kotlin) 编写,所以不需要更改代码。...所有开发者: 下面简单介绍了为符合 64 位要求,您需要采取的步骤。如需详细了解此流程,请参阅我们的深入介绍文档。 检查您的 APK 或应用软件包是否使用原生代码。...您可以使用 APK 分析器检查 .so 文件,确定它们是由您自己的代码构建,还是由您使用的 SDK 或开发库中导入。...如果您的 APK 中没有任何 .so 文件,则说明您的应用已经符合 64 位要求。 启用 64 位架构并重新构建使用您自己的代码中引入的原生代码 (.so 文件) 。...我们明白迁移第三方游戏引擎是一个非常艰难的过程,需要很长的筹备时间。
如何针对不同的用户给出最优的安装体验,正是 Android App Bundle 所要解决的问题。本文将阐述 App Bundle 可以带来的好处,并演示如何使用这种全新的分发功能。 ?...这意味着,如果我使用的是一台 Android One 手机 (小米 A1) 而且我设置的主要语言是英文,则这台手机将获得基础 APK 以及支持英文、arm64 CPU 架构和 xhdpi 屏幕分辨率的配置...安装早于 Android Lollipop 版本的设备也可以享受安装文件体积缩小的福利,但其 APK 中将包含所有语言。 在如今,很显然构建一个统一的臃肿的 APK 的做法已经过时了。...如果您使用 Android Studio 3.2 及更高版本,那么您只需点击几下即可生成已签名的应用束,将其上传到 Play Store,即可让用户开始享受更小尺寸 APK 所带来的便利。...Google Play 会管理您的应用签名密钥,您只使用上传密钥,用于验证您的身份。自己管理应用签名密钥存在风险,因为在丢失密钥后,您将无法更新已发布的应用; 同样,您的密钥很容易被盗。
您可以使用 Android Studio 来体验 "新建模块 (New Module)" 的流程,我们在这篇文章里还会介绍该流程背后的逻辑,以及之后您可以如何更改配置。...如果您需要为一个特定模块指定 API 版本,这些会非常有用。 此外,AndroidManifest 文件中的每一个 uses-feature 元素 都可以被用来作为安装条件。...您可以选择某些特定的功能模块只在特定的国家可用。这将是一个实现本地化应用非常好的方式。为了实现这个功能,您需要添加 user-countries 标签并设置两个字母的国家代码。...不含代码的模块 有时您只想分发给用户一个类似 TensorFlow 模型的大型资源文件,在这个功能模块中,您并没有任何代码,这时请确保该模块的 AndroidManifest 文件中 hasCode 的值设置为...使用按需安装节省了初始的下载时间和大小。 在 AndroidManifest 文件中,您需要设置分发选项为 on-demand。
在上一篇文章《Gradle 与 AGP 构建 API: 如何编写插件》中,您学习了如何编写您自己的插件,以及如何使用 Variants API。 如果您更喜欢通过视频了解此内容,请 点击此处 查看。...同时您也将进一步完善您的插件,并学习如何使用新的 Artifact API 访问各种构建产物。...Property 假设我想要创建一个插件,该插件可以使用 Git 版本自动更新应用清单文件中指定的版本号。为了达到这一目标,我需要为构建添加两个 Task。...,因为我想将它存储在一个中间文件中,从而让其他 Task 也可以读取和使用这个值。...在插件代码中,我将此 Task 注册为 "Verifier",并传入 APK 文件夹和当前变体产物的 buildArtifactLoader 对象。
小技巧 1: 使用最新版本的 Android Gradle 插件 ?...在应用需要发布和上架的时候,我们往往会使用 “Multiple APK” 构建,它可以根据 ABI 和像素密度创建不同版本的应用,使包体积降低等。...当您的应用包含大量本地化资源或者为不同像素密度加入了特别的资源时,您可能需要应用这个小技巧来提高构建速度——最小化开发阶段打包进应用的资源数量。...构建系统默认会将声明过或者使用过的资源全部打包进 APK,但在开发阶段我们可能只用到了其中一套而已,针对这种情况,我们需要使用 resConfigs() 来指定构建开发版本时所需要用到的资源,如语言版本和屏幕像素密度...即使您不是特别在意这些性能损耗,但是它仍然是有风险的——依赖库的版本更新会让您的构建充满不确定性,可能两周之后您就在构建一个完全不一样的工程了,因为依赖库代码的更新对开发者们是不可见的。
对应用程序build.gradle文件进行了一些小的更改,可以将.apk名称更改为-release-.apk。...需要在app的目录下面修改build.gradle文件。 第一步是将project.archivesBaseName设置为您的应用程序名称。...}-${defaultConfig.versionName}.apk" } } 这就是重命名.apk文件所需要的全部。...} } 这里需要注意一点就是,如果我们用了productFlavors{}属性,那咱们就不用去添加defaultConfig.versionName了,因为如果添加了,打出包的名称就会多一个versionName...如果您加了defaultConfig.versionName,那打出的包就会是AppName-test-release-1.0.0-1.0.0.apk。
64-bit Q: 为应用添加 64 位架构支持会带来 APK 的体积增大,但 Google Play 只允许上传最大 100MB 的 APK,这种情况应该如何解决?...如: 当用户首次下载您的应用时,基础 APK 加上为特定设备而构建的 APK 之和不超过 150MB。除了 Android App Bundle 方式,您也可以为不同架构发布不同的 APK 文件。...让开发者无需更改任何代码,便可有效缩短应用的启动时间,减少内存消耗。...A: 在 Android 8.0 或以上的版本中,可以考虑使用 SSAID (Settings.Secure.ANDROID_ID),因为它的生成是基于设备用户安装应用签名的密钥。...该页面列举了如何从 OEM 厂商获取并安装 Beta 版本。 Permissions Q: 为什么扫描蓝牙及 Wi-Fi 热点也需要申请地理位置权限?
通过 ProGuard 移除未使用的代码 为版本构建启用代码压缩以运行 ProGuard。启用压缩可确保交付的 APK 不含有未使用的代码。...解决Android 64k 要解决Android64k,你需要将你的应用项目设置为使用 Dalvik 可执行文件分包配置,其次需要对项目进行以下修改,具体取决于应用支持的最低 Android 版本。...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。...对于发布定制,将 minSdkVersion 设置为适于您的实际最低支持级别。此设置生成的 Dalvik 可执行文件分包 APK 可兼容更多设备,但构建时间更长。...提示:由于有适用于不同 Dalvik 可执行文件分包需求的不同构建变体,因此也可以为不同变体提供不同清单文件(这样,只有适用于 API 级别 20 和更低版本的清单文件会更改 标记名称),或者为每个变体创建不同的
Android 5.0 及更高版本的 Dalvik 可执行文件分包支持 Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,后者原生支持从 APK 文件加载多个 DEX...因此,如果您的 minSdkVersion为 21 或更高值,则不需要 Dalvik 可执行文件分包支持库。...配置您的应用进行 Dalvik 可执行文件分包 将您的应用项目设置为使用 Dalvik 可执行文件分包配置需要对您的应用项目进行以下修改,具体取决于应用支持的最低 Android 版本。...方案的应用可能不能在低于Android 4.0 (API level 14) 机器上启动,这个主要是因为Dalvik linearAlloc的一个bug ; 采用MultiDex方案的应用因为需要申请一个很大的内存...该情况不应出现在直接从应用代码访问的代码上,因为构建工具能识别这些代码路径,但可能在代码路径可见性较低(如使用的库具有复杂的依赖项)时出现。
APK,以针对不同设备配置和语言进行分发。...您可以使用通用的应用签名密钥或使用针对不同渠道的唯一应用签名密钥,包括面向 Google Play 的唯一应用签名密钥。...很快,Play 管理中心将帮助您更加轻松地进行首次发布应用,只要在第一次发布到开放渠道之前,您都可以更改应用签名密钥。...若想使用 Play 应用签名,您需要提供应用签名密钥的副本,因为 Google Play 需要使用此签名副本进行签名,并向您的现有用户提供版本更新。...不过,要做到这一点,当您上传 App Bundle 时,您还需要上传使用旧密钥签名的原 APK,这样一来,Google Play 即可继续向现有用户推送更新。 Q:我可以更改我的应用签名密钥吗?
前言 随着APP的一次又一次迭代,APP的体积也越来越大,这时候,会引发这么一个问题,早期的错误异常如下: ? 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题: ?...通过ProGuard移除未使用的代码 为版本构建启用代码压缩以运行 ProGuard。启用压缩可确保交付的 APK 不含有未使用的代码。...解决Android 64k 要解决Android64k,你需要将你的应用项目设置为**使用 Dalvik 可执行文件分包配置,其次需要对项目进行以下修改,具体取决于应用支持的最低 Android 版本。...对于发布定制,将 minSdkVersion 设置为适于您的实际最低支持级别。此设置生成的 Dalvik 可执行文件分包 APK 可兼容更多设备,但构建时间更长。...提示:由于有适用于不同 Dalvik 可执行文件分包需求的不同构建变体,因此也可以为不同变体提供不同清单文件(这样,只有适用于 API 级别 20 和更低版本的清单文件会更改 标记名称),或者为每个变体创建不同的
如果设置为 “false”,则原生库以未压缩的形式存储在 APK 中。虽然您的 APK 可能较大,但应用应该加载得更快,因为库是在应用运行时直接从 APK 加载。 ...和您使用的 AGP 版本。...如需了解详情,请参阅版本说明使用 DSL 打包压缩的原生库。 我们建议以未压缩的形式打包原生库,因为这会减小应用安装大小,缩减应用下载大小,并缩短用户的应用加载时间。...apksigner 为 APK 签名后又对 APK 做了更改,则 APK 的签名将会失效。...因此,要使用 zipalign 等工具,您必须在为 APK 签名之前使用。 我们需要用zipalign进行对齐,并且必须要在使用apksigner进行签名之前对齐。
下面,让我们看看具体指标… 指标 针对下列的每一个指标,我们都对比了应用的三个不同版本: 接入 Compose 前 : 回到 2020 年 2 月,这是我为 Tivi 添加 Comepse 支持的第一个...此时的 Tivi 已经完全基于 Compose (版本 1.0.0-beta05) 了,同时在整个应用中都没有 Fragment。 APK 尺寸缩减 您的用户最为关心的指标,莫过于 APK 大小。...在使用了 Compose 后,我们发现 APK 大小缩减了 41%,方法数减少了 17% 这一数字表明,当您需要保留所有 View 类,以防出现需要在布局文件中使用它们的情况时,压缩工具的作用十分有限。...代码行数 我知道在比较软件项目时,计算源代码行数不是特别有用的统计方式;但这种方式能够提供一个视角,帮助我们了解事物是如何变化的。 为了进行测试,我使用了 cloc 工具。...而其他版本使用了较旧的 Hilt 版本,其使用了不同的机制,会严重拖慢生成 dex 文件的时间。
使用 app bundle 并不需要改变现有的代码库。 您只需要通过命令行或者 Android Studio 即可构建一个 Android App Bundle。...通过命令行构建 如果使用命令行,您需要像下面这样运行其中一个 bundle 任务: ....每一个功能模块或者不同配置的 apk 文件包含了其对应的资源及代码,而 base 模块会将所有的这些模块集成到一起。...除非必须,不然我不建议修改这个部分,因为设置 enableSplit 为 false 会极大地增加您应用在设备安装时占用空间的大小。...// 默认值为 true // 这意味着每个不同的相关配置会生成一个分解后的 apk。
如果您在使用这些功能并正在寻找下一个稳定版本的 Android Studio,那么您可以立即下载 Android Studio 4.2!...通过使用 Android Studio 4.2,您现在可以自动补全 Directions Args 的代码,并实现从源到 XML 的代码导航。点击这里 了解更多详情。...在 Android Studio 4.2 中,我们扩展了与 Apply Changes 相兼容的大量更改,当在 Android 11 以上版本的设备或模拟器上运行时,我们可添加资源 (占需要完全重启的更改的...其次,我们已将默认的 Java 编程语言更新为版本 8。最后,我们为 APK v3 和 APK v4 签名格式添加了支持。您可以查看 相关文档 详细了解其他 AGP 更新。...需要注意的是,如果您向多个设备部署测试,系统可能会提示您启用此行为。
当您使用Refactor to AndroidX命令或创建一个minSdkVersion设置为“P” 的新项目时,这两个标志都会设置为true。...Google Play的新应用服务模型称为动态投放,然后使用您的应用捆绑软件为每个用户的设备配置生成并提供优化的APK,因此每个用户只下载运行您的应用所需的代码和资源。...通过动态交付,用户可以根据需要下载和安装应用的动态功能。 要构建一个包,请选择Build> Build Bundle(s)/ APK(s)> Build Bundle(s)。...如果在新变体上运行lint,则会发出警告 Lint现在记录了一个基线记录的变体和版本,并且如果您在与创建基线的变体不同的变体上运行它,lint会警告您。...您可以通过在项目gradle.properties文件中包含以下内容来开始使用R8的预览版本: android.enableR8 = true 修改了默认的abi 当建立多个APK每个目标不同的ABI
导语: 官方出的 FAQ ,kotlin是兼容 java 6.0 的 jvm 语言,此篇 FAQ 中,大概需要重点关注的大概是 APK 的影响吧: Kotlin 在运行时可能会在您的 debug APK...中增加 7000 个方法和 1M 的大小,如果您使用 Kotlin 替换如 Guava、RxJava 等其他的库,影响可能会小一些。...Kotlin 在未来的发展方向? 我们使用 Kotlin 的一个原因是因为 JetBrains 公司在设计这门语言时十分周到和有启发性的工作。...Kotlin File/Class” 窗口提供了一些文件的选择,因为在您更改了类型之后,Kotlin 会自动转换文件类型,所以您选择什么都不重要。...Kotlin 在运行时可能会在您的 debug APK 中增加 7000 个方法和 1M 的大小,如果您使用 Kotlin 替换如 Guava、RxJava 等其他的库,影响可能会小一些。
领取专属 10元无门槛券
手把手带您无忧上云