Android Studio 导入module方法及相关问题解决

在工程中有两个独立开发的项目,现在需求是将两个项目合并到一个项目中,因此需要将其中一个项目作为module导入到另一个项目中,下面是导入的方法以及在合并中出现的问题的解决办法。

一、导入module

  1. 首先作为被导入的项目,需要在app.gradle中去掉applicationId:因为不是作为一个app,所以要将applicationId删掉;同时将apply plugin: 'com.android.application'改为apply plugin: 'com.android.library'。

2.在主项目中导入module

然后在选择要导入的工程的根目录

点击Finish就可以导入module了。

  1. 然后在settings.gradle的include中加入module的name,使得主项目可以识别出应用内的module。
  1. 接下来在Project Structure中将该module添加为依赖

选择刚导进来的module就可以了。

  1. 正常情况下重新编译一遍就可以重新使用了。然而现实没有文字中说的那么简单:),有很多问题是需要解决的。下面是我在导入过程中遇到的一些问题及解决办法。

二、相关问题及解决办法

1.依赖冲突

android.support依赖的版本不同,可以在build.gradle中添加如下代码:

其他依赖库如Android dependency 'io.reactivex.rxjava2:rxandroid' has different version,我的解决办法是使相同的依赖库的版本保持一致。

注:主项目module和依赖项目module的build.gadle文件中,comileSdkVersion、buildToolsVersion、minSdkVerion、targetSdkVersion这些版本号两个build.gradle文件最好设置成一样的,因为是在同一项目、同一环境下运行的,所以设置成一样的。

2. 报错

Error: resource previously defined here. AAPT2 error: check logs for details.
Error:duplicate value for resource 'attr/ratio' with config ''.
Error: resource previously defined here.

找到报错的地方发现android:support中定义的"ratio",跟项目中自定义的控件RectangleLayout中定义的冲突了,当然这个跟导入module出现的问题没关系,属于自定义后出现的bug。

解决办法是将自定义的"ratio"改成"ratio_rectangle",避免冲突。

3. 报错

Error:Execution failed for task ':test:processDebugManifest'.> Manifest merger failed with multiple errors, see logs.
可以在Android Studio中进入Manifest.xml,点击Merged Manifest的Tab,查看冲突:

可以看到冲突如下:

两个module中定义了不同的android:icon,android:roundIcon等属性,在报错中已经给出了我们冲突的解决办法,需要在app的Manifest.xml中加入tools:replace,强制使用app的属性,如下:

4. 报错

Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2
解决办法是在项目的GradleScripts中,gradle.properties文件中添加一行代码就行:

5. 报错

Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
原因是新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格。在文档中说,如果你需要使用 String.format(String, Object...) 来格式化你的字符串,你可以把格式化参数放在你的字符串中,参见下面的例子:

Hello, %1$s! You have %2$d new messages.

在我的报错的地方有如下定义:

确定 %d:%d

解决办法是将其改成

确定 %2$d:%2$d

该文件中类似的地方也要做同样的修改。

6.报错

Error: Tag attribute name has invalid character ' '
原因竟然是在主module的Manifest.xml中多了一个空格!
点击报错的Manifest是debug中的Manifest,需要找到源文件main中的Manifest进行修改

把空格去掉就好了。

还有一些其他的小bug,一般都能找出原因。感慨一下,书面文字上的流程看似简单,其实实践中有很多问题没有写出来。纸上得来终觉浅,很多知识是无法用文字去表达的,还是要多实践。

有错误的地方欢迎指正~

你可能感兴趣的:(Android Studio 导入module方法及相关问题解决)