开发环境
- 开发工具:IntelliJ IDEA 2018
- SDK版本:Android API 28
- Java版本:Java 11.0.1
目的
用IntlliJ IDEA进行安卓开发的时候,需要用到另一个安卓项目的功能模块,于是要想办法把依赖的工程添加到项目中。在测试了无数次“Import Module”并失败后,终于找到了解决方案。
创建项目
为了更好的演示效果,在这里我创建三个Android项目demo1、demo2、agent,之后分别在demo1和demo2里添加agent并对其引用。
demo1的文件在com.example.demo1下,demo2的文件在com.example.demo2下,agent的文件在com.example.agent下。
以此类推创建三个项目,并对其进行配置。建议一开始的时候,选择自动导入Gradle:
添加依赖项目(成功案例)
配置文件
首先在demo1项目下创建一个libs文件夹(方便项目管理),并将依赖项目放到该目录下。
之后修改项目的配置:
需要修改三个文件:agent/build.gradle、demo1/settings.gradle、demo1/app/build.gradle
- 在agent/build.gradle文件中添加:
apply plugin: 'android-library'
android {
compileSdkVersion 28
buildToolsVersion "27.0.3"
sourceSets {
main {
manifest.srcFile 'app/src/main/AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['aidl']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
}
并将原有的take clean部分删掉:
task clean(type: Delete) {
delete rootProject.buildDir
}
因为demo1项目中已经有一个clean()函数,若不删掉agent/build.gradle中的clean()则会报错。
- 在settings.gradle文件中添加agent项目所在位置:
include ':app',':libs:agent'
- 在app/build.gradle中添加:
dependencies {
implementation project(':libs:agent')
}
配置好后,我们能看到libs文件夹和agent文件夹都多了个标识,并且多了一个libs.iml文件:
添加Module Dependency
在写好配置文件后,还需要进入Project Structure添加Module Dependency:(名为agent和libs的Module是自动生成的)
生成文件路径
在配置好文件后,agent的原Activity文件会失效:
这时候我们只需要在该路径下再新建一个Activity文件,IDEA就会帮我们自动生成一个可使用的路径:
之后我们只需要把agent的项目文件放到这个src和res路径下即可。
若出现Unable to resolve dependency错误,则看下是否在agent/build.gradle文件里是否被自动添加了依赖管理。可以选择注释掉,或者改为:
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}
测试
在demo1/app路径下的文件试着导入agent项目里的文件:
测试成功!
添加依赖项目(失败案例)
在网上看到很多解决方法是直接在Project Structure里导入项目,但经测试行不通:
在demo2项目里导入agent:
在经过上述导入步骤后,能看到目录下多了agent项目,但在demo2的文件里仍然无法使用agent项目的文件。