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

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文件的大小,所以我按照指南将APK划分为块

定义了下载
扩展文件
的方法,但我需要知道如何从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中。