doNotStrip,exclude,lazyInit,merge,pickFirst,setDoNotStrip,setExcludes,setMerges.

614 阅读1分钟

android gradle 配置中,以下代码是什么意思?

packagingOptions { 
pickFirst 'lib/armeabi-v7a/libredbase.so' 
pickFirst 'lib/arm64-v8a/libredbase.so' 
pickFirst 'lib/armeabi-v7a/libreddownload.so'
pickFirst 'lib/arm64-v8a/libreddownload.so' 
pickFirst 'lib/armeabi-v7a/libredlog.so' 
pickFirst 'lib/arm64-v8a/libredlog.so' 
pickFirst 'lib/armeabi-v7a/libredstrategycenter.so' 
pickFirst 'lib/arm64-v8a/libredstrategycenter.so' 
}
  • 使用了 pickFirst 关键字,它的作用是指定在打包过程中,如果发现多个相同路径的文件,只保留其中的一个;

那问题来了

doNotStrip,exclude,lazyInit,merge,pickFirst,setDoNotStrip,setExcludes,setMerges,setPickFirsts 都解释一下;

doNotStrip: 防止被 ProGuard 或其他混淆工具剥离(strip)某些特定资源。可以用来指定不想被剥离的文件或文件类型。

packagingOptions {
    doNotStrip 'META-INF/LICENSE'
    doNotStrip '**/*.so'
}

exclude: 排除指定路径下的文件或文件类型,不包含在最终的 APK 中。

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
    exclude 'assets/config.json'
}

lazyInit: 延迟初始化资源,即只有在运行时才会解压缩、加载或使用的资源。

packagingOptions {
    lazyInit 'assets/lazy_resource.txt'
}

merge: 合并指定路径下的文件,通常用于合并相同路径下的多个资源文件。

packagingOptions {
    merge 'assets/config.json'
    merge 'assets/default_config.json'
}

pickFirst: 保留指定路径下的文件,如果存在多个相同路径的文件,只保留其中一个。

packagingOptions {
    pickFirst 'lib/armeabi-v7a/libnative.so'
    pickFirst 'lib/arm64-v8a/libnative.so'
}