玩转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库。

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