在安卓项目开发中,为了测试方便,将常用的测试函数,写成插件(或者模块),发布到JCenter仓库。这样带来的好处,避免了维护的繁琐,取而代之的是只需要一句简单的引用即可。
下面将分成android studio依赖库开发、依赖库的发布、android studio插件开发发布和插件的本地测试三个部分进行讲解。
一、android studio依赖库开发和发布
首先,需要说明的是“依赖库”这个名字是我自己起的。
依赖库的形式如下:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
//compile 'com.myutils:app:latest.release' //最新版本
compile 'com.myutils:app:0.2' //指定了具体的版本号
}
看到上面形式,大家应该明白了吧,就是build.gradle中的依赖库。其中com.myutils:app:latest.release和com.myutils:app:0.2便是我们开发的依赖库,需要注意的是,这两个其实是同一个依赖库,只是版本号不同而已,前一个表示获取最新版本号的依赖库,后者表示获取0.2版本的依赖库。
在了解了基本的概念后,此时可以进入依赖库的开发之旅了!!
首先,创建myutils安卓工程。
如下:
很简单一个工程,代码是自动生成的。关于代码,应该不用多说什么了吧!
另外,为了增加点难度,添加了NDK 代码,原因是,我们可以将关键代码写到NDK中,防止被破解。此时的工程结构如下:
观察目录结构,区别就是多了一个JNI目录,里面添加了c代码。c代码如下:
#include <string.h>
#include <jni.h>
#include "example_com_myutils_MainActivity.h"
JNIEXPORT jstring JNICALL Java_example_com_myutils_MainActivity_stringFromJNI
(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env, "Hello this is my utils");
}
为了讲解的简单,此处我只返回简单字符串。
另外,我们还需要修改下MainActivity类的代码,如下:
package example.com.myutils;
public class MainActivity {
private native String stringFromJNI();
static {
System.loadLibrary("hello-jni");
}
public String getString(){
return stringFromJNI();
}
}
上面的代码很简单,就是加载动态库,并从静态库获取字符串,其中public String getString()函数便是我们依赖库的核心功能,此处只是简单的获取一个字符串,更多功能,还是需要读者自己来实现了。
另外需要注意的是,此处我偷懒了,利用了原来的类MainActivity。真正开发时,需要换成自己的工具类。还有一点,由于只是个依赖库,如果里面的资源等等,没有应用到,可以把manifest.xml和资源文件全部删除,减小体积。
作为最后一步,来到build.gradle构建脚本。
首先,将
apply plugin: 'com.android.application'
修改为:
apply plugin: 'com.android.library'
添加依赖库的名称和版本号,具体代表什么意思,会在下一节讲解,如下:
group = "com.myutils"
version = "0.2"
此时,完整的build.gradle脚本如下:
apply plugin: 'com.android.application'
group = "com.myutils"
version = "0.1"
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "example.com.myutils"
minSdkVersion 8
targetSdkVersion 23
versionCode 1
versionName "1.0"
ndk {
moduleName "hello-jni"
ldLibs "log", "z", "m"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'
}
其中,需要说明的是,里面原有的依赖库等等,都可以删除的。如果不需要编译依赖库的时候,编译NDK,可以把version = “0.1”以下的内容全部删除掉。
上面便是我们的依赖库的开发,简单,却五脏俱全。
下一章,我们接着讲解如何发布到JCenter库。