如何从主APK中排除资源或aar文件

时间:2017-12-15 11:55:13

标签: android android-install-apk apk-expansion-files

由于我需要减小APK文件的大小,因此我按照Apk Expansion指南将APK分成了块。

Downloader library定义了下载expansion file的方法,但我需要知道从apk中排除resource filesaar文件的方式。

我找到了以下内容,但这些文件既没有删除任何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'
    }
}

3 个答案:

答案 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等。相反,您应该拆分不属于显式编译的大型元素。好的候选人是这样的:

  • 打开GL纹理
  • 声音效果的大型声音文件
  • 大型数据或游戏地图
  • 大图片

所有这些都可能位于您应用的资源目录中,并且是扩展文件的主要候选者。

如果您没有上述任何一项,如果您的规模超过100Mb,则可能是您没有正确地编辑代码,并且包含您的应用程序不使用的大量代码。如果是这种情况,那么学习正确使用Proguard可能比切换到扩展文件有了更大的改进。如果您可以说明APK的大小在哪里,那么用户可能会建议您更多?图片多少钱?可执行代码多少钱?您使用的是Android Studio和Java,本机代码还是Unity等技术?所有这些都与APK大小最小化的方法略有不同。

答案 2 :(得分:1)

你可以做两件事。

  1. 首先,您可以使用Lint。 Lint将有助于突出显示并删除您在代码中未使用的所有资源,包括drawable。

  2. 其次,您可以使用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'
        }
    } }