玩轉Android studio 插件開發、測試、JCenter庫發佈(1)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章