之前一直纠结于android studio依赖工程application和library的问题,直到某天在AOSP想同时支持AS编译和android.mk编译之后突然意识到了一个问题,这里做一些记录,并验证过可行。
==============================================================================
其实不管项目里面有什么文件,关键是我们配置时想让项目被编译成什么包。
一般我们常会有这么两种需求:
1、创建一个AS的Application A项目,然后再创建一个library的model B,估计大部分的朋友都是这么做的,这也是AS默认支持的模式,没有什么大问题,但是gradle本身会把这两个项目创建在同一个目录下,这不利于分模块维护。
2、如果别人事先已经创建了一个Application项目 B,在Application项目A中想把B作为Library引入也是可以的,而且我觉得这种方式更好,首先B既可以是库也可以是独立的app这样才能单独去对A做单元测试和运行到设备上测试,需要的时候又可以把B作为Librry来用,做法如下:
- 首先创建好app A和app B项目,在AS中File-New-Import Model
- 因为两个项目都是app会提示已经包含了一个app的module,那么我们只要选中import按钮,然后将module name改为B就可以了
- 打开B项目的build.gradle文件,按照如下修改
-
//apply plugin: 'com.android.application' apply plugin: 'com.android.library'
//applicationId "com.mxnavi.mxnavibasiclib"
之后File-Project Structure选择A项目的app选项,在Dependecies中选择Model Dependency在弹出的对话框中选择B模块即可。
注意:之前如果编译过B项目,需要把B项目下的build目录删除,否则编译出错。其次这种方式引入的项目B代码会被拷贝一份到A目录下,这样两套代码维护还是不方便,貌似AS目前还不知道比较灵活的项目组织方案,希望后面能改善啊。