Android合并项目的一些坑

Android合并项目的一些坑

最近要把一些公司以前的项目(eclipse)作为module合并到一起

发现一些问题,写下文档来帮助自己记忆.也以便以后翻阅

先放一篇大神的总结:Android开发各类常见错误解决方案

坑一

多个Module依赖同一个jar的解决方法 :

将任意一个Module中的jar依赖为compile files('your jar name'),
其他需要依赖的地方改为provided files('your jar name')并且删除compile fileTree(include: ['*.jar'], dir: 'libs) 即可。
「jar需要复制到需要用到的module libs文件夹下」
下面详细介绍为什么这样做以及案例

===============分割线===============

AndroidStudio中Module相当于Eclispe中的Library,
这里不做过多介绍 多个Module依赖同一个jar,
直接把jar放入对应需要的Module会导致编译报类冲突 

这里就要讲一讲AndroidStudio中的依赖的几种方式 

compile
是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。 

Provided
是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。 
APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 

Test compile 
仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。 

Debug compile 
仅仅针对debug模式的编译和最终的debug apk打包 

Release compile 
仅仅针对Release 模式的编译和最终的Release apk打包。 

我们需要用的是Provided,这样在写代码的时候可以在Module中正常使用jar中的类,
但是要有一个Module以compile的方式依赖这个jar,这样编译的时候只有一个jar编译进apk。 
注:使用Provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module


坑二

报错:Error:Execution failed for task ':ProjectName:mergeDebugResources'. > Crunching Cruncher some file or .9.PNG failed, see logs:

在build.gradle里添加以下两句:

aaptOptions.cruncherEnabled = false     
aaptOptions.useNewCruncher = false
Android合并项目的一些坑_第1张图片
sample.png

用来关闭Android Studio的PNG合法性检查的,直接不让它检查。
还是不行的话就把报错那张图片删除重做吧

坑三

报错:FATAL EXCEPTION: main
java.lang.NoSuchFieldError: No static field left_arrow of type I in class 
Lcom/yourprojectname/R$id; or its superclasses (declaration of 'yourprojectname.R$id' 
appears in /data/data/yourprojectname/files/instantrun/dex/slice-slice_9-classes.dex)

起因:文件名冲突,R文件存在多个同名id引发错误

解决方法:

其他module和APP module引用的xml布局文件同名,有可能导致后面的题库module会引用报错

所以尽可能把module的xml文件名改为与APP module的不一样就解决了.

例如:一般都会有的activity_main,把module的activity_main改成activity_othername


坑四

一些方法过时,或者一些包已经不能用了

GOOGLE吧,然后把过时的方法修改回来,然后重新添加一些包

还有就是其他module的View 的点击事件不能用try catch , 要注意了


坑五


一些自定义的组件记得去布局文件里面修改包名哦~


坑六

修改了Android项目的最小SDK版本之后出现很多stysle文件找不到

compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.name"
minSdkVersion 14
targetSdkVersion 23
}

compileSdkVersion 是多少版本的

那么compile 'com.android.support:appcompat-v7:23.2.1’ 就是啥版本的。

坑七

Android studio 编译问题:finished with non-zero exit value 2
报错:Error:Execution failed for task ':androidShopNC2014Moblie:transformClassesWithDexForDebug'.
>
com.android.build.api.transform.TransformException: 
com.android.ide.common.process.ProcessException: 
java.util.concurrent.ExecutionException: 
com.android.ide.common.process.ProcessException: 
org.gradle.process.internal.ExecException: 
Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' 
finished with non-zero exit value 2

解决方法:(这个错误在app的build.gradle里面添加下面这句就好了。)

android { 
defaultConfig { 
            multiDexEnabled true
       }
}


坑八

Error:Execution failed for task 
':app:transformClassesWithJarMergingForDebug'.> 
com.android.build.api.transform.TransformException: 
java.util.zip.ZipException:
 duplicate entry: org/apache/http/ConnectionClosedException.class

解决方法:

这个是在我们启动的时候报错的,而不是在编译的时候,
原因是存在了相同库或者库中的类名冲突了
stackoverflow上有人也提了这样的问题。
只需要删除其中的一个就可以解决了。


坑九

打包APK的时候出现冲突的错误:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'

解决方法:
1 , 删除相同包
2 , 请参考这个:stackoverflow上的一个回答
3 , 还有这个:AndroidStudio中包冲突问题(使用解析和Multidex重复条目

你可能感兴趣的:(Android合并项目的一些坑)