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'
}