在安卓項目開發中,爲了測試方便,將常用的測試函數,寫成插件(或者模塊),發佈到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庫。