Android应用程序常见编译问题解决

  • Post author:
  • Post category:其他


主应用程序中引用了外部的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方式不一样。直接引用同名资源会覆盖。



版权声明:本文为xueshanhaizi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。