快速开发与封装可集成的Android Library
前言
日常工作中不可避免的出现了很多常常需要复用的代码,例如我在做项目开发中使用到的对话框,因为使用了统一样式、统一的调用方法和接口、回调函数等,而每次开发新的工程都需要对其的代码、布局文件、图片文件以及颜色资源等进行代码部署,费时费力,若是能对其进行封装,将大大降低开发成本。
本次我将以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的引用
在本地写好相应功能后就可以在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
如有疑问欢迎在评论区留言,如果本文对您有所帮助欢迎点击下边的“喜欢”按钮。