减少Android应用程序的八种方法APK大小

//如果下载失败,则例外… .//

                public void onFailure(例外e){

//…然后做某事//

                }

            })

            .addOnSuccessListener(new OnSuccessListener(){

                @覆盖

//如果模块已成功下载… //

                public void onSuccess(Integer sessionId){

//…然后做某事//

                    mySessionId = sessionId;

                }

            });

}

}




您现在可以向动态功能模块添加代码和资源,用户可以在运行时请求模块。



[]( )三 购买前先试用:提供即时应用APK

====================================================================================



它可能不是传统的,可安装的APK,但您可以将应用程序的一部分作为轻量级,独立的Instant Apps APK提供,然后用户可以按需加载。对于那些在极其有限的存储或限制性数据计划中苦苦挣扎的人来说,Instant Apps可能是他们体验您的应用程序的唯一可行方式。



在我们的[三部分Instant Apps系列中,我们创建了一个]( )映射到唯一URL [的多功能Instant Apps APK]( )。URL映射使您的Instant App可以从Web上支持超链接的任何位置访问,包括论坛,推文,Facebook帖子和博客。但是,URL映射也是一个多步骤过程,需要您拥有一个可以托管项目`assetlinks.json`文件的Web域。



在最新版本的Android Studio中,创建Instant Apps APK变得更加容易,因为现在可以创建一个未映射到_任何_ URL 的即时应用程序,从而消除了与URL映射相关的所有复杂性。



在您发布无网址即时应用后,用户可以通过应用的Google Play商家信息上的“ \*\*立即尝试”\*\*按钮访问该应用。



要创建这种“无URL”即时应用程序,您需要:



*   Android Studio 3.2或更高版本。

*   Instant Apps Development SDK 1.3.0或更高版本。

*   最新版本的Android SDK Build和Platform工具。



支持Instant Apps的项目具有独特的结构。如果您将模块化作为标准应用程序开发过程的一部分进行练习,那么您可能只需要对项目进行一些调整,但如果您的项目_没有_模块化,那么请准备花一些时间重组它。



要支持Instant Apps,您需要创建以下模块:



*   \*\*应用模块。\*\*这是“标准”可安装应用程序模块。

*   \*\*基础模块。\*\*这包含将在您的所有项目模块中使用的代码和资源,例如您的应用程序的启动器图标。

*   \*\*功能模块。\*\*其中包含提供独立功能所需的代码和资源。

*   \*\*Instantapp模块。\*\*这是一个容器,它最终会占用您项目的每个功能模块,并将它们转换为Instant App APK。



有关此独特项目结构的更详细信息,请查看:[什么是Android即时应用程序?]( )



*   \[Android SDK

    

    什么是Android即时应用程序?

    

    杰西卡索恩斯比\]([https://www.colabug.com/goto/aHR0cDovL2NvZGUudHV0c3BsdXMuY29tL3R1dG9yaWFscy93aGF0LWFyZS1hbmRyb2lkLWluc3RhbnQtYXBwcy0tY21zLTI5Mjgz]( ))

    

    []( )

    



如果您正在开始一个新项目,那么您很幸运:您可以创建一个已经具有Instant Apps结构的空白项目。只需正常创建一个新项目,但在提示时选择**此项目将支持即时应用程序**。



然后,您可以正常地为每个模块添加代码和资源。



要测试您的无URL即时应用程序,您需要一个兼容设备,根据官方Android文档,它是运行Android 5.1或更高版本的“最”物理设备。如果您正在使用模拟器,那么您将需要使用Android 8.1或更高版本,x86架构并包含Google API的AVD(Android虚拟设备)。您还需要在测试设备或AVD上登录有效的Google帐户。



要将Instant App置于测试中,请从Android Studio工具栏中选择**Run** > **Run** …,然后选择**Edit Configurations** …



在左侧菜单中,选择**instantapp**。由于我们正在测试无URL的即时应用程序,请找到**URL**字段并删除其中的所有文本。现在选择**Run**。如果设备提示您选择加入Instant App程序,请点击**是,我在**。



您的即时应用程序现在应该出现在屏幕上,无需安装,也无需URL!



在发布应用程序时,您可以完成两次签名过程,以创建单独的可安装和即时应用程序APK - 或者您可以将项目构建为应用程序包。



[]( )四 发布即时应用程序启用的应用程序包

====================================================================================



在Android Studio 3.3 beta 1及更高版本中,您可以将Instant Apps与App Bundle结合使用,以创建一个包含可安装和即时应用程序的\*\*.aab\*\*文件。



要将应用程序设置为发布包含Instant App 的\*\*.aab**文件,请打开项目的**instantapp\*\*模块。



在此模块的**AndroidManifest.xml**文件中,添加以下内容:



<``manifest

xmlns:android``=``"[http://schemas.android.com/apk/res/android]( )"

xmlns:dist``=``"[http://schemas.android.com/apk/distribution]( )"

//Set the targetSandboxVersion to 2//

android:targetSandboxVersion``=``"2"``>

//Add the following//

<``dist:module dist:instant``=``"true" />

</``manifest``>




打开app模块的build.gradle文件,确保您的即时变体versionCode的可安装版本小于其可安装版本:



android {

...



flavorDimensions“flavorDimension”

productFlavors {

    即时{

        versionCode 1

    }

    安装{

        versionCode 2

    }

}

}




从Android Studio菜单栏中选择Build > Generate Signed Bundle / APK,然后照常构建App Bundle,确保使用释放密钥对其进行签名。



[]( )五 删除所有未使用的方法,类,字段,属性和资源

=========================================================================================



未使用的代码和资源很容易找到进入项目的方式,特别是当您使用库时。由于它们为您的应用添加了零值,因此您应该始终追踪并删除不必要的资产,并且有几种工具可以帮助您:



### []( )1.喜欢冒险吗?试试New R8 Code Shrinker



代码缩小可以通过删除未使用的代码和资源来帮助您减小APK的大小。



Android Studio 3.3 beta 1预览了即将推出的R8代码缩小工具,该工具还可以执行desugaring和dexing,据Google称,它比ProGuard更快地缩小代码。



要自己尝试R8,请确保您运行的是Android Studio 3.3 beta 1或更高版本,然后将以下内容添加到gradle.properties文件中:



android.enableR8 =真




### []( )2.使用ProGuard收缩代码



在撰写本文时,R8仍然处于预览状态,因此在它稳定之前,您可能更愿意使用ProGuard从代码中删除未使用的类,方法,字段和属性。



要启用ProGuard,请将以下内容添加到模块级build.gradle文件中:



buildTypes {

   发布 {

   minifyEnabled是的

       proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'

   }

}

}




请注意,ProGuard可能会删除您的应用程序实际需要的代码,因此您应该在发布之前始终使用ProGuard测试您的项目。



### []( )3.启用资源收缩



一旦启用了代码收缩,就可以使用资源收缩来识别和删除不必要的资源:



buildTypes {

   发布 {

//添加以下//

    shrinkResources为true

       minifyEnabled是的

       proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'

   }

}

}




### []( )4.使用Android Lint改进您的代码



Lint是一种静态扫描工具,可以识别代码中未引用的资源。但是,Lint实际上并未删除这些资源,因此您需要检查其报告并手动删除已识别的资源。



要运行Lint,请从Android Studio工具栏中选择**Analyze** > **Inspect Code** … 如果Lint检测到任何未引用的资源,那么它将在“ \*\*检查结果”\*\*窗口中列出它们。



[]( )六 将PNG,JPEG和BMP转换为WebP

========================================================================================



如果您的项目包含许多drawable,那么压缩它们可以显着减小APK的大小。



如果您的项目`minSdkVersion`是18或更高,那么您可以通过将它们转换为WebP格式来压缩您的PNG,JPEG和BMP。



首先,按住Control键并单击要转换的drawable,然后选择**Convert to WebP …**选择有损或无损编码。选择当编码结果大于原始图像时跳过图像,然后单击**确定**以转换图像。



[]( )七 使用Android Studio的APK分析器检查您的APK

==================================================================================================



有时,您可能无法完全确定导致APK失控的原因。



您可以使用Android Studio的新_APK分析器_识别出与APK大小相关的最大贡献者。此工具可让您探索不同类别文件的绝对大小和相对大小,甚至是单个文件的大小,这样您就可以_确切地_知道应该集中精力的位置。



要分析APK,只需从Android Studio的菜单栏中选择**Build** > **Analyze APK即可**。



在随后的窗口中,选择有问题的APK。APK分析器将在新面板中打开。



对于每个文件和文件夹,APK分析器显示:



*   \*\*原始文件大小。\*\*这是磁盘上此项目的解压缩大小。

*   \*\*下载大小。\*\*这是项目的估计压缩大小,因为它将由Google Play提供。

*   \*\*总下载大小的百分比。\*\*此项目代表的APK总下载大小的百分比。



这不是APK分析器提供的唯一功能。



想象一下,你已经成功削减了APK的大小,并发布了一个轻量级的应用程序,在Google Play上积累了5星级的评论 - 这并不意味着你可以不再担心APK的大小!在某些时候,您将要发布更新,这意味着APK大小将再次成为主要关注点。



虽然监控你的APK从一个版本发展到下一个版本总是一个好主意,但如果APK大小有所增加,那么你_肯定_想仔细看看发生了什么。



您可以使用APK分析器突出显示当前APK与之前的APK之间的所有差异,这可以帮助您了解可以优化的区域和资产,甚至可以完全删除。



要比较APK,首先从Android Studio的菜单栏中选择**Build** > **Analyze APK**。



然后选择最新版本的APK。在APK分析器的右上角,选择\*\*与之前的APK比较…\*\*接下来,选择以前版本的APK。应该会出现一个弹出窗口,突出显示当前APK与之前APK之间的所有差异。



[]( )八 不要忘记Android Go!

===================================================================================



新兴市场代表了全球增长最快的智能手机受众,而Vivo和Oppo等品牌的崛起已经证明,预算设备有可能主导这个快速扩张的市场。



为了帮助Android吸引这些全新且不断增长的受众,谷歌发布了Android Go,这是一款具有性能和存储改进功能的Android版本,旨在为预算友好型设备提供更好的体验,包括内存小于1GB的设备。



Android Go用户可以访问整个Google Play商店,但Google会突出显示针对Android Go优化的应用,包括用户设备上占用少于40MB的应用。



按照本文中的建议,您应该能够为使用它的_每个_人显着减小APK的大小。但是,如果您想专门针对Android Go用户进行一些额外缩减,那么您可以使用[Android的多APK功能]( )发布针对Android Go平台优化的APK。



要创建专用的Android Go应用,您需要创建一个与“常规”应用具有相同包名和签名证书的APK,但具有唯一的版本代码。



在创建Android Go APK时,您还需要将以下内容添加到您的Manifest中:






### []( )想学习更多Android知识,或者获取相关资料请加入Android技术开发交流2群:935654177。本群可免费获取Gradle,RxJava,小程序,Hybrid,移动架构,NDK,React Native,性能优化等技术教程!




**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/7ff34d960ad4255ef5c397052d638787.png)
![img](https://img-blog.csdnimg.cn/img_convert/1e243fa5a9867b9f659337b9d234608a.png)
![img](https://img-blog.csdnimg.cn/img_convert/470a56c94a98e7ce3ca825c8a6d08a04.png)
![img](https://img-blog.csdnimg.cn/img_convert/6a06cd5ec64eba148681fb13867fb04d.png)
![img](https://img-blog.csdnimg.cn/img_convert/14563f1978b75e9350fdae22048d589a.png)
![img](https://img-blog.csdnimg.cn/img_convert/77e8e5e3006c8c6230d10e6e64066ed5.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/34510fccbf2ace9fc32ee0e141ea0dd0.png)



### 尾声

以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

![](https://img-blog.csdnimg.cn/img_convert/dd4c795533998688da90dce24feb8192.webp?x-oss-process=image/format,png)




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/bafaf9a1254c630534b4825fc372af1a.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中...(img-xV3UOLOO-1712894785339)]



### 尾声

以薪资待遇为基础,以发展为最终目标,要在高薪资的地方,谋求最好的发展!

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。

[外链图片转存中...(img-fc2dtc7D-1712894785339)]




**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-2cRR4uDq-1712894785339)]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 一个Android应用可以分为多个APK文件,这是为了支持设备配置分层,使不同设备能够下载适合它们的APK,从而节省存储空间。例如,一个应用可以拆分为多个APK,每个APK分别专门针对不同的屏幕分辨率、架构等设备配置提供服务。在用户安装应用时,Google Play Store 会自动选择适合当前设备配置的APK下载并安装。 ### 回答2: Android一个APK多个APK是指在开发Android应用程序时,使用了动态特性来创建多个APK文件。这样做有多种原因和优势。 首先,一个APK多个APK可以帮助开发者解决应用程序过大的问题。随着应用程序功能的增加和迭代,APK文件可能会变得非常大,这会导致用户在下载和安装应用程序时需要较长的时间和较高的网络流量。而使用多个APK可以将应用程序拆分为不同的部分,根据用户的需求进行灵活下载和安装,从而减少APK文件的大小。 其次,一个APK多个APK还可以提供不同的应用程序体验。通过为应用程序的不同版本和不同设备创建不同的APK,开发者可以根据用户的需求和设备的特性,提供特定的功能和优化的用户体验。比如,对于低端设备,可以提供精简版本的APK以提高性能和响应速度,而对于高端设备,则可以提供更多的功能和高级特性。 此外,一个APK多个APK还可以用于多语言支持。通过创建不同的APK来适配不同的语言版本,开发者可以在不同的国家和地区提供本地化的应用程序界面和文本内容,使用户可以更好地理解和使用应用程序。 总而言之,一个APK多个APK的开发模式可以帮助开发者解决应用程序过大、提供灵活的下载和安装、提供不同的应用程序体验以及多语言支持等问题,提高应用程序的用户体验和适配性。 ### 回答3: Android的一个APK多个APK是指一种特殊的应用程序方式,它允许开发者将一个应用程序划分为多个APK,以适应不同设备、不同配置和不同需求的用户。 通过一个APK多个APK的方式,开发者可以降低APK文件的大小,优化应用程序的性能,并提供更好的用户体验。 这种打方式主要是通过Google Play市场的分发功能来实现的。开发者可以在Google Play开发者控制台中定义应用程序的配置变体,例如不同的设备架构、多语言支持等。然后,当用户在Google Play上安装应用程序时,系统会根据用户设备的特性和设置,自动下载并安装适合的APK。 通过一个APK多个APK的方式,开发者可以根据设备的CPU架构,提供不同的二进制文件,以充分利用设备的处理能力。同时,开发者还可以根据用户所在的地区和语言偏好,提供相应的资源文件,括文字、图像等,以确保应用程序的显示效果和可用性。 此外,通过这种方式,开发者还可以定义不同的应用程序配置选项,例如启用或禁用特定功能、使用不同的算法和算法库等。这样,用户可以根据自己的需求和喜好选择所需的APK,以定制化自己的应用体验。 综上所述,一个APK多个APK的打方式在Android应用开发中具有重要的意义。它为开发者提供了更多的灵活性和可定制性,同时也提供了更好的用户体验和应用性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值