主应用程序中引用了外部的Module模块,出现了如下错误,不保证如下解决方法通用所有问题:
1: Error:(2) Error retrieving parent for item: No resource found that matches the given name ‘android:TextAppearance.Material.Widget.Button.Inverse’.
项目中引用了一个Module,Module中置顶的compileSdkVersion与主版本不一致,导致匹配失败
2:Module中与主版本都定义了同名attr,
完整问题分析
如果出现了同名的attr,会提示错误Attribute “xxx” has already been defined,表示相同的属性被重复定义,全部搜索查找同名attr,之后将同名attr改成不一样的名字
3: armeabi 与 armabi-7 都放置了so
系统加载的时候会默认先找-7对应包里的so
4: Module中与主版本都引用了appcompat
Module中与主版本必须要引用相同版本的appcompat,否则会Error:(2) Attribute “textAllCaps” has already been defined
5: 主版本与Module同名资源
主版本与Module中均定义了同名资源,比如同名drawable,string,编译打包后主版本默认覆盖Module中的值。因此Module中同名文件加前缀。
6: 主板本与Module引用相同的jar
可以采用只保留一份或者Module中dependencies对引用jar采用provided方式编译
7: universal-image-loader-1.9.1升级到universal-image-loader-1.9.3
ImageLoaderConfiguration.Builder 初始化很多方法已经废弃掉,建议采用如下官方写法:
查看链接
ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context);
config.threadPriority(Thread.NORM_PRIORITY – 2);
config.denyCacheImageMultipleSizesInMemory();
config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
config.tasksProcessingOrder(QueueProcessingType.LIFO);
config.writeDebugLogs(); // Remove for release app
// Initialize ImageLoader with configuration.
ImageLoader.getInstance().init(config.build());
8: Module中含有资源
Module中的gradle脚本中一定要添加如下,否则编译后,所有资源合并到主版本,R路径报名变为主版本报名,导致classNotFround
main {
manifest.srcFile ‘AndroidManifest.xml’
java.srcDirs = [‘src’]
resources.srcDirs = [‘src’]
aidl.srcDirs = [‘src’]
renderscript.srcDirs = [‘src’]
res.srcDirs = [‘res’]
assets.srcDirs = [‘assets’]
jniLibs.srcDirs = [‘libs’]
}
9:将Module打包成aar
主版本中引用aar,同名资源会提示重复定义,这个与直接引用Module方式不一样。直接引用同名资源会覆盖。