android关于project和module的关系这里就不说了。要知道as把一个project看成一个工作空间,新建一个project就等于建立了新的工作空间,转而将module当成普通的我们所理解的“project”。这是与eclipse中的project对比的结果。今天在导入第三方开源项目的时候遇到了问题,也是经过查找看很多资料才导入成功,在这个做出分享,希望看到这篇博文的朋友们遇到类似问题可以马上解决问题。
导入第三方项目答题过程其实挺简单的(本次开源项目是自己编写的,所以项目在本地,对于as可以导入非本地开源项目的方法不在这篇文章的范围),主要步骤是:
1、下载第三方开源项目到本地
2、as——file——new——import module将开源项目添加到工作空间中来。此时会发现Gradle Scripts中多了一个buile.gradle文件是导入项目的配置文件。打开这个文件确保第一行applyplugin的值是'com.android.library'
3、找到原app项目的buile.gradle文件,该文件的apply plugin值是'com.android.application':apply plugin: 'com.android.application',在下面的
dependencies中添加compile project(':刚才导入的项目名字')
4、重新编译项目就可以运行了,也就是导入成功了,但是有时会出现一些问题导致主项目R文件缺失的问题。R文件存放在项目下的buile/generated/source/r目录下。普通情况可以通过rebuild项目重新生成R文件,但是有时重建项目也不能顺利生成R文件,问题经常出来导入的项目文件是有错误的,或者有些东西跟主项目冲突了。
如果是导入的项目出问题了,一般是res下的资源有问题,就要先去处理掉问题,确保问题已经解决。
下面是一些常用问题的清单:
问题一:
Error:(26, 9) Attribute application@icon value=(@drawable/logo) from AndroidManifest.xml:26:9
Error:(28, 9) Attribute application@theme value=(@style/ThemeActionBar) from AndroidManifest.xml:28:9
is also present at XXXX-trunk:XXXXLib:unspecified:15:9 value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:24:5 to override
Error:Execution failed for task ':XXXX:processDebugManifest'.
> Manifest merger failed with multiple errors, see logs
原因:AS的Gradle插件默认会启用Manifest Merger Tool,若Library项目中也定义了与主项目相同的属性(例如默认生成的android:icon和android:theme),则此时会合并失败,并报上面的错误。
解决方法有以下2种:
方法1: 在Manifest.xml的application标签下(主项目)添加tools:replace="android:icon, android:theme"(多个属性用,隔开,并且记住在manifest根标签上加入xmlns:tools="http://schemas.android.com/tools",否则会找不到namespace哦)
方法2: 在build.gradle根标签上加上useOldManifestMerger true (懒人方法)
问题二:
Library Project里面的 BuildConfig.DEBUG永远都是false 。这是Android Studio的一个已知问题,某Google的攻城狮说,Library projects目前只会生成release的包。
Issue 52962: https://code.google.com/p/android/issues/detail?id=52962
解决方法: (某Google的攻城狮推荐的方法)
Workaround: instaed of BuildConfig.DEBUG create another boolean variable at lib-project's e.g. BuildConfig.RELEASE and link it with application's buildType.
问题三:
每次保存的时候,每行多余的空格和TAB会被自动删除(例如结尾、空行的多余空格或TAB)
特别是每次准备提交SVN,Review代码时候你就蛋疼了,显示一堆不相关的更改,看的眼花。
解决方法:
Settings->IDE Settings->Editor->Other->Strip trailing spaces on Save->None
问题四:
编译的时候,报:Failure [INSTALL_FAILED_OLDER_SDK]。一般是系统自动帮你设置了compileSdkVersion
解决方法:
修改build.gradle下的compileSdkVersion 'android-L'为compileSdkVersion 19(或者你本机已有的SDK即可)