由于我需要减小APK文件的大小,因此我按照Apk Expansion指南将APK分成了块。
Downloader library定义了下载expansion file
的方法,但我需要知道从apk中排除resource files
和aar
文件的方式。
我找到了以下内容,但这些文件既没有删除任何resource-drawable files
也没有删除任何arr
文件,并且apk的大小保持不变。
出于测试目的,我添加了drawables
大约4 MB
和几个arr
大小为3 MB
的文件。我正在从apk
选项中创建Build->Build APK
。我不知道以下是否会影响已签名的APK。
sourceSets {
main {
resources {
exclude '**/drawable/*'
}
}
}
android {
packagingOptions {
exclude 'lib/armeabi/a.so'
}
}
答案 0 :(得分:5)
如果您希望保留或放弃特定资源,请在项目中使用<resources>
标记创建XML文件,并指定要保留在工具中的每个资源:保留属性和要在 tools:discard 属性中放弃的每个资源。两个属性都接受以逗号分隔的资源名称列表。
<?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中。这样您就可以自定义要保留的资源。
答案 1 :(得分:2)
扩展文件可能不包含任何可执行代码。这部分是Google Play政策,也是为了安全。因为它们被写入您的应用程序和Play可访问的目录,并且可能写入SD卡,如果您将代码放入其中,它将打开您的应用程序以获得安全漏洞。
因此,您不希望将AAR文件放在扩展文件中,因为这些文件通常具有代码。许多资源可能不合适,因为这些资源是使用您的应用程序编译的,因此有资源ID等。相反,您应该拆分不属于显式编译的大型元素。好的候选人是这样的:
所有这些都可能位于您应用的资源目录中,并且是扩展文件的主要候选者。
如果您没有上述任何一项,如果您的规模超过100Mb,则可能是您没有正确地编辑代码,并且包含您的应用程序不使用的大量代码。如果是这种情况,那么学习正确使用Proguard可能比切换到扩展文件有了更大的改进。如果您可以说明APK的大小在哪里,那么用户可能会建议您更多?图片多少钱?可执行代码多少钱?您使用的是Android Studio和Java,本机代码还是Unity等技术?所有这些都与APK大小最小化的方法略有不同。
答案 2 :(得分:1)
你可以做两件事。
首先,您可以使用Lint。 Lint将有助于突出显示并删除您在代码中未使用的所有资源,包括drawable。
其次,您可以使用Proguard。使用Proguard
,您可以选择要缩小的APK版本,包括debug
(或主要版本,如您的示例)版本。只需插入以下代码即可。
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'
}
} }