Android成长干货Android技术

快速开发与封装可集成的Android Library

2017-06-01  本文已影响133人  kongzue

前言

日常工作中不可避免的出现了很多常常需要复用的代码,例如我在做项目开发中使用到的对话框,因为使用了统一样式、统一的调用方法和接口、回调函数等,而每次开发新的工程都需要对其的代码、布局文件、图片文件以及颜色资源等进行代码部署,费时费力,若是能对其进行封装,将大大降低开发成本。
本次我将以Kongzue Dialog对话框库封装的过程为例,讲解如何快速开发和封装一个Android Library。

提示

请注意,本文所有操作均建立在可以链接互联网,正常可访问Google、bintray、GitHub等网站的前提下,若不能正常访问,请自行寻找办法,本文不再另外提供。

一、创建库项目

这里我使用了Android Studio 2.3.2版本作为IDE来进行Android Library的初步开发。
首先创建SDK的测试工程:DialogDemo,这是一个标准Android工程,用于测试Android Library是否正常使用以及最后测试从Maven仓库引入我们的库是否成功。


标准Android项目

创建完成后,点击Android Studio左上角的File->New->New Module在打开的对话框选择“Android Library”,点击Next下一步,分别输入库名称和模组名为“Dialog”和“dialog”,点击“Finish”完成库的创建。接下来就可以对创建好的Android Library库进行相应的开发了。
开发的过程中可以对Android Library的Application进行设置,以便于部分组件的初始化,首先创建Application类DialogPlugin,源代码如下:

public class DialogPlugin extends Application {

    private static Context context;
    private static Handler handler;
    public static boolean isDebug = true;

    @Override
    public void onCreate() {
        super.onCreate();
        //在这里初始化你需要初始化的东西
    }

    public static Context getContext() {
        return context;
    }

    public static Handler getHandler() {
        return handler;
    }

}

并在AndroidManifest.xml中完成绑定:

    <application
        android:name=".DialogPlugin"
        android:allowBackup="true"
        android:label="@string/app_name"
        android:supportsRtl="true">
    </application>

如果你需要输出Log日志,可以自行编写一个Log类对日志信息进行打印,但此处注意,日志输出应该是可控的,因此我在Application类DialogPlugin中预留了一个isDebug的参数来控制日志是否输出,如有需要可以提供给用户一个方法来决定是否开启日志打印模式。日志类Log的全文如下:

public class Log {

    public static void println(Object msg){
        if(!DialogPlugin.isDebug){
            return;
        }
        android.util.Log.d("kongzue.dialog>>>",msg.toString());
    }

}

开发的过程在此略过,根据创建的Android Library需要提供的功能进行开发即可,本例中封装的Dialog源代码可以进入https://github.com/kongzue/Dialog 查看。完成功能的相关开发后,就将进入封装的过程了。

Android Library库dialog的目录结构

二、Android Library的引用

在本地写好相应功能后就可以在Demo中进行调试了,进入DialogDemo 的build.gradle(Module:app)中,在dependencies { }中加入以下代码:

    compile project(':dialog')

然后在Demo工程中调用相应的Android Library相应组件方法进行测试,测试通过。

MessageDialog.show(this,"提示","提示信息","关闭",null);

完成此步后说明功能一切正常,接下来就是需要将Android Library上传到Maven仓库来进行在线引用了。

三、JFrog Bintray的注册和使用

JFrog Bintray分为收费版和免费开源版两个版本,进入JFrog Bintray首页( bintray.com )后点击右上角的Sign In进入登陆界面,注意,点击下边不明显的“Sign Up to an Open Source account”链接注册为免费版本(如图所示):


JFrog Bintray注册

注册过程需要填写的都十分简单,主要是姓名、用户名、密码、邮箱、你的国家,填写完毕后校验邮箱后直接注册完成即可。登录后进入你的设置,找到API Key,输入你的登陆密码提交后获得API密钥,步骤如下图所示:


Step1
Step2
记录你的API密钥,稍后需要用到。

回到首页,点击“Add New Repository”创建新目录,创建命名为“maven”的目录。


Step3

四、发布你的Android Library

接下来是关键,首先需要我们进入build.gradle(Project:DialogDemo)进行如下修改:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        //...
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
        //...
    }
}

然后需要到我们创建的Android Library库的build.gradle(Module:dialog)中修改为如下代码:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

def siteUrl = 'https://github.com/kongzue/Dialog' //项目在github主页地址
def gitUrl = 'https://github.com/kongzue/Dialog.git'   //Git仓库的地址

group = "com.kongzue.dialog"//发布aar前缀根节点
version = "1.0.0"//发布aar的库版本
//最后生成是compile 'com.kongzue.dialog:dialog:0.0.1' 就是group + :+module名字 + :+version

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                name 'dialog'//添加项目描述
                url siteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id 'myzchh'//设置自己ID
                        name 'myzchh'//设置自己名字
                        email 'myzcxhh@live.cn'//设置自己邮箱
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    configurations = ['archives']
    pkg {
        repo = "maven"
        name = "dialog" //项目在JCenter的名字
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

完成修改后进入local.properties文件添加如下代码:

bintray.user=你的用户名
bintray.apikey=你的API密钥

完成后,点开Android Studio的控制台Terminal,输入如下指令:

gradlew install

待提示“BUILD SUCCESSFUL”后完成。
注意,此处可能出现异常,有可能是因为字符集问题,可以通过尝试删除代码中的注释等中文进行解决,其他多半是网络问题没有下载下来相关文件,多次重试即可。
再执行如下命令上传文件:

gradlew bintrayUpload

完成后进入你的JFrog Bintray的maven目录,应该能够看到有一个叫做“dialog”的项目,点进去可以看到库的引用地址,如下图所示:


引用地址

回到Android Studio,进入build.gradle(Module:app),添加以下代码:

repositories {
    maven {
        url  "http://dl.bintray.com/myzchh/maven"
    }
}

将maven指向你的JFrog Bintray的maven仓库,接下来将之前在dependencies { }中引用代码:

    compile project(':dialog')

替换为

compile 'com.kongzue.dialog:dialog:1.0.0'

编译后即可完成库的引用。此处出现问题的话主要可能出现在网络连接上,以及不要使用“offline”的Gradle,具体设置方法为File->Setting->Build,Execution,Deployment->Gradle中关闭“Offline Work”设置即可。
一切搞定,Enjoy it!

声明

本文感谢以下两篇文章给于指点,并进行了补充和完善。
《Android studio 制作aar 使用Gradle发布项目到JCenter仓库》@WX_JIN的博客
http://blog.csdn.net/WX_JIN/article/details/51006703
《android SDK开发》
http://www.kancloud.cn/digest/phoebe/130447
如有疑问欢迎在评论区留言,如果本文对您有所帮助欢迎点击下边的“喜欢”按钮。

上一篇下一篇

猜你喜欢

热点阅读