在一般的开发当中,项目的所有内容(包括App、Moudle、库目录等)都是放在同一个项目目录底下的,这样Android Studio才能够正常地识别这些内容。但是对于一些公共模块来说,如果在每个项目下面都拷贝一份,那面公共模块就会变得难以维护。其实Android Studio是允许我们做一些外部引用的,下面就是我对这方面的一些整理。
引用外部的Module
打开项目的Settings.gradle文件,在这个文件下加入你要引用的Module,新增内容如下:
include 'module'
project(':module').projectDir = new File(settingsDir, '../../Android/Module')
这里需要用到ProjectDescriptor的projectDir来指定项目的一个路径,代码中所指定的路径是settings目录的相对路径,写入该设置后Module就会从外部导入进来。
打开菜单"File" - "Project Structure...",在打开的面板左侧的Modules一栏中选择主程序,然后再右边面板中选择Dependenicies页签,然后点击下方的“+”号选择“Module Dependency”,在弹出的界面中选择上面导入的Module添加为依赖库。
设置依赖库
设置外部的JNI目录
要用到JNI实现往往要么是想提升处理效率要么就是要跨平台实现,那么对于跨平台时需要导入外部的JNI目录的肯定性就很大了,因为不仅仅是Android在用这份代码,其他平台也在用。因此,需要对项目配置进行外部引用,操作步骤如下:
打开build.gradle文件,找到android.sourceSets.main属性,加入下面的代码
jni.srcDirs "src/main/jni", "../../otherJNIPath"
其中jni.srcDirs就是用于指定多个JNI目录,在这里可以指定相对于项目的目录路径。这样就可以指定一个外部的JNI目录进来了。
设置外部的libs目录
打开build.gradle文件,找到android.sourceSets.main属性,加入下面的代码
jniLibs.srcDirs "src/main/jni/jinLibs", "../../otherLibsPath"
其中jniLibs.srcDirs就是用于指定多个libs目录,在这里可以指定相对于项目的目录路径。这样就可以指定一个外部的libs目录进来了。
如果JNI编译中需要引用本地so,在 ndk.ldLibs 属性中加入要引入的so的绝对路径,定位到android.defaultConfig.ndk属性,加入下面的代码
String libPath = "\\usr\\prjs\\otherLibsPath\\armeabi\\libzip.so"
ldLibs "log", "android", "z", libPath