Android 如何从主APK中排除资源或aar文件
由于我需要减小APK文件的大小,所以我按照指南将APK划分为块 定义了下载Android 如何从主APK中排除资源或aar文件,android,android-install-apk,apk-expansion-files,Android,Android Install Apk,Apk Expansion Files,由于我需要减小APK文件的大小,所以我按照指南将APK划分为块 定义了下载扩展文件的方法,但我需要知道如何从apk中排除资源文件和aar文件 我发现了以下内容,但它们既没有删除任何资源可绘制文件,也没有删除任何arr文件,并且apk的大小保持不变 出于测试目的,我添加了约为4MB的draawables和两个大小为3MB的arr文件。我正在从Build->Build apk选项创建apk。我不知道以下内容是否只对已签名的APK有效 sourceSets { main { r
扩展文件
的方法,但我需要知道如何从apk中排除资源文件
和aar
文件
我发现了以下内容,但它们既没有删除任何资源可绘制文件
,也没有删除任何arr
文件,并且apk的大小保持不变
出于测试目的,我添加了约为4MB的draawables
和两个大小为3MB的arr
文件。我正在从Build->Build apk
选项创建apk
。我不知道以下内容是否只对已签名的APK有效
sourceSets {
main {
resources {
exclude '**/drawable/*'
}
}
}
android {
packagingOptions {
exclude 'lib/armeabi/a.so'
}
}
你可以做两件事
首先,你可以使用。Lint将有助于突出显示和删除代码中未使用的所有资源,包括可绘图项
第二,你可以使用。使用Proguard
可以选择要收缩的APK版本,包括debug
(或main,如示例中所示)版本。只需插入以下代码
android {
buildTypes {
debug {
minifyEnabled true
useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
} }
如果您希望保留或放弃某些特定资源,请在项目中创建一个带有
标记的XML文件,并在工具:保留属性中指定要保留的每个资源,在工具:放弃属性中指定要放弃的每个资源。这两个属性都接受以逗号分隔的资源名称列表
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
tools:discard="@layout/unused2" />
将此文件保存在项目资源中,例如res/drawable/keep.xml。生成不会将此文件打包到APK中。通过这种方式,您可以自定义要保留的资源。扩展文件可能不包含任何可执行代码。这部分是谷歌的游戏策略,但也是出于安全考虑。因为它们被写入了一个你的应用程序和游戏都可以访问的目录,也可能被写入SD卡,如果你输入它们的代码,它会打开你的应用程序进行安全攻击
因此,您不希望将AAR文件放在扩展文件中,因为这些文件通常都有代码。而且许多资源可能不合适,因为它们是用你的应用程序编译的,因此有资源ID等。相反,你应该分割出不属于显式编译的大型元素。好的候选人是这样的:
- 开放GL纹理
- 用于声音效果的大型声音文件
- 用于游戏的大型数据或地图
- 大图像
所有这些都可能位于应用程序的资产目录中,并且是扩展文件的主要候选对象
如果您没有上述任何一项,如果您的大小超过100Mb,则很可能是您没有正确地预编代码,并且包含了许多应用程序不使用的代码。如果是这种情况,那么学习正确使用Proguard可能比切换到扩展文件更大的改进。因此,如果你能说出APK的大小,用户可能会给你更多建议?图片多少钱?可执行代码的费用是多少?您使用的是Android Studio和java、本机代码还是Unity之类的技术?所有这些都有略微不同的APK大小最小化方法。对于官方文档,请参阅另一个漂亮的工具,以验证某些文件是否打包到APK中。