写了几天几夜的模块,经过测试后,终于可用了,想要加入到正式工程中,但由于这个模块不仅仅是几个java文件那么简单,还用到了c++以及各种资源文件,还引入了其它的一些模块,整个模块如果是一个个文件复制粘贴过去的话既麻烦也因未分类而使得代码凌乱,于是乎,就需要将此可执行的工程模块移植到主项目工程中去了。
本文适应以下几种情况:
1. 在网上找到可用的工程,想加载到正式项目中;
2. 自己平常测试的时候,往往也是一个完整的可执行的工程,也想要加载到正式项目中;
3. 正式工程中没有C++代码及相关配置,但在正式工程中又不好直接加,配置较为繁琐;
以下有两个工程,如下,
HelloProjectA 工程,是主工程,此工程不含C++部分
HelloProjectB工程,是另外一下可执行的工程,这里含有C++,
这是通过AS模块创建的,默认含有
"public native String stringFromJNI();",如下,
我们的需求就是,在A工程中(本不包含C++内容),通过加入B工程(作为A工程的一个模块),来达到使用B工程中 stringFromJNI()以及其它(实际中如果有的话)需要添加的功能。
首先,在B工程中,选中 app 模块,通过 Shift + F6 ,将app模块进行改名操作,这里,我们改成了
MeFromProjectB
Gradle
同步完后,我们进入到 B工程文件夹内,将 MeFromProjectB 目录拷贝至 A工程的根目录下,如下,
然后执行 gradle sync 操作,完成后,还不能直接使用,因为此模块已由主程序降级为了一个模块,因此还需要改几处地方,
一处是 MeFromProjectB 模块下的 build.gradle 文件,
1. 将 app plugin: 'com.android.application' 改为 app plugin: 'com.android.library'
2. 去掉 applicationId 这一项,
3. 如果需要,也可以去掉如 complieSdkVersion 等各种版本的设置项,不删除也可以,但要和主程中设置的最小支持的SdkVerion保持一致,否则会编译出错
再一处是 MeFromProjectB 模块下的 AndroidMenifest.xml 文件
除开根节点及 application 节点之外,其它如权限之类的描述信息可以删除掉,不删除的话 编译可能会报错,
另 intent-filter 中的内容也可以去掉,毕竟它已经不是主Activity了
最后一处是app主模块下的build.gradle文件,需要在
dependencies 中加入针对 MeFromProjectB 模块的编译项,如下
修改完,
gradle 同步,即可在主模块中引用 新增模块的包和其它资源了。