介绍
如果不是所有我们喜欢包含在项目中的第三方库,那么我们作为Android开发人员的生活将更加艰辛。 在本教程中,您将学习如何通过创建和发布自己的Android库来回馈开发人员社区,人们可以轻松地在其项目中添加和使用它们。
1.创建一个Android库
如果您的库仅由Java类组成,则将其打包为JAR并使用文件主机进行分发可能是共享它的最快,最简单的方法。 如果要从控制台创建它,则以下命令就足够了:
jar cvf mylibrary.jar Class1.class Class2.class ... ClassN.class
但是,本教程向您展示如何使用更复杂的库,这些库不仅包含Java类,而且还包含各种类型的XML文件和资源。 此类库创建为Android库模块,通常打包为AAR文件。
让我们创建一个简单的Android库,为使用它的开发人员提供自定义View
。
步骤1:添加新模块
首先,通过从文件菜单中选择新建>新建模块 ,将新的Android模块添加到您的项目中。 将显示以下屏幕,其中提供了许多选择:
选择“ Android库” ,然后按“ 下一步” 。 在随后的表格中,输入您的媒体库名称,然后按下一步 。 我将这个库称为mylittlelibrary 。
在最后一个屏幕中,选择“不添加活动” ,然后按“ 完成” 。
您的项目现在将具有两个模块,一个用于应用程序,一个用于库。 其结构如下所示:
步骤2:建立版面
通过右键单击库模块的res文件夹并选择New> XML> Layout XML File来创建新的布局XML 。 将其命名为my_view.xml 。
为了简化本教程,我们将创建一个自定义View
,在LinearLayout
中具有两个TextView
小部件。 将一些文本添加到TextView
小部件之后,布局XML文件应如下所示:
步骤3:建立Java类别
创建一个新的Java类,并将其命名为MyView.java 。 确保将此文件放在库模块的src目录中,而不是app模块中。
为了使此类表现为View
,使其成为LinearLayout
类的子类。 Android Studio会提示您向该类添加一些构造函数。 添加它们之后,新类应如下所示:
public class MyView extends LinearLayout {
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
如您所见,我们现在有两个构造函数。 为了避免向每个构造函数添加初始化代码,请从每个构造函数调用一个名为initialize的方法。 将以下代码添加到每个构造函数中:
initialize(context);
在initialize
方法中,调用inflate
将我们在上一步中创建的布局与该类相关联。
private void initialize(Context context){
inflate(context, R.layout.my_view, this);
}
2.在本地使用库
现在,该库已准备就绪,让我们在同一项目的app模块中使用它,以确保没有问题。 为此,请将其作为compile
依赖项添加到应用程序模块的build.gradle文件中:
compile project(":mylittlelibrary")
在应用模块内创建一个新的Java类MainActivity 。 使它成为Activity
类的子类,并重写其onCreate
方法。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
在onCreate
方法中,使用其构造函数创建自定义视图的实例。 将其传递给setContentView
方法,以使其填充Activity
所有屏幕空间:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View v = new MyView(this);
setContentView(v);
}
您的Activity
现已准备就绪。 将其添加到应用清单后,构建您的项目并将应用部署到Android设备。 应用启动时,您应该能够看到自定义视图。
3.在Bintray上发布您的图书馆
Bintray是一个流行的平台,可用于发布Android库。 它是免费的,易于使用。
首先在Bintray上创建一个帐户。 登录帐户后,您将看到您已经拥有六个存储库。 您可以使用其中之一,也可以创建一个新的存储库。 在本教程中,我将使用名为maven的存储库,这是一个Maven存储库。
访问您的个人资料页面,然后单击“ 编辑”按钮。 在下一页上,单击“ API密钥”链接以查看您的API密钥。
记下密钥,因为在使用Bintray插件时将需要它来进行身份验证。
步骤1:添加必要的插件
要在Android Studio中与Bintray进行交互,您应该在项目的build.gradle文件的dependencies
中包含Bintray插件 。
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
因为您将库上载到Maven存储库,所以还应该添加Maven插件 ,如下所示。
classpath "com.github.dcendents:android-maven-gradle-plugin:1.3"
步骤2:套用外挂程式
打开您的库模块的build.gradle文件,并添加以下代码以应用我们在上一步中添加的插件。
apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'
步骤3:指定POM详细信息
Bintray插件在上载库时将查找POM文件。 即使Maven插件为您生成了它,您也应该自己指定groupId
标记的值和version
标记的值。 为此,请在gradle文件中使用group
和version
变量。
group = 'com.github.hathibelagal.librarytutorial' // Change this to match your package name
version = '1.0.1' // Change this to match your version number
如果您熟悉Maven,并且想知道为什么我们没有指定artifactId
标签的值,那是因为默认情况下,Maven插件将库的名称用作artifactId
。
步骤4:生成源JAR
为了符合Maven标准,您的库还应该有一个包含库源文件的JAR文件。 要生成JAR文件,请创建一个新的Jar
任务generateSourcesJar ,并使用from
函数指定源文件的位置。
task generateSourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier 'sources'
}
步骤5:生成Javadoc JAR
还建议您的库具有一个包含其Javadocs的JAR文件。 因为您当前没有任何Javadocs,所以创建一个新的Javadoc
任务generateJavadocs来生成它们。 使用source
变量指定源文件的位置。 您还应该更新classpath
变量,以便任务可以找到属于Android SDK的类。 您可以通过向其添加android.getBootClasspath
方法的返回值来实现。
task generateJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath()
.join(File.pathSeparator))
}
接下来,以生成的Javadoc一个JAR,创建一个Jar
的任务,generateJavadocsJar,并通过destinationDir
财产generateJavadocs
其from
功能。 您的新任务应如下所示:
task generateJavadocsJar(type: Jar) {
from generateJavadocs.destinationDir
classifier 'javadoc'
}
为确保generateJavadocsJar
任务仅在generateJavadocs
任务完成后才启动,请添加以下代码片段,该片段使用dependsOn
方法对任务进行排序:
generateJavadocsJar.dependsOn generateJavadocs
第6步:包括生成的JAR文件
要将源文件和Javadoc JAR文件包含在工件列表中(这些工件将被上传到Maven存储库),您应该将其任务名称添加到名为archives的configuration
。 为此,请使用以下代码段:
artifacts {
archives generateJavaDocsJar
archives generateSourcesJar
}
步骤7:运行任务
现在该运行前面步骤中创建的任务了。 打开Gradle Projects窗口并搜索名为install的任务。
双击它以运行与库模块关联的任务。 完成运行后,您将拥有发布库所需的一切,有效的POM文件,AAR文件,源JAR和Javadocs JAR。
步骤8:配置Bintray插件
要配置插件,您应该在Gradle文件中使用bintray
闭包。 首先,使用user
和key
变量分别对您的Bintray用户名和API密钥进行身份验证。
在Bintray上,您的库将位于Bintray包中 。 您应该使用pkg
闭包的直观命名的repo
, name
, licenses
和vcsUrl
参数提供有关它的详细信息。 如果该软件包不存在,它将自动为您创建。
当您将文件上传到Bintray时,它们将与Bintray软件包的版本关联。 因此, pkg
必须包含其name
属性设置为唯一名称的version
关闭。 (可选)您还可以使用desc
, released
和vcsTag
参数提供描述,发布日期和Git标签。
最后,要指定应上载的文件,请将configuration
参数的值设置为archives 。
这是一个示例配置:
bintray {
user = 'test-user'
key = '01234567890abcdef01234567890abcdef'
pkg {
repo = 'maven'
name = 'com.github.hathibelagal.mylittlelibrary'
version {
name = '1.0.1-tuts'
desc = 'My test upload'
released = new Date()
vcsTag = '1.0.1'
}
licenses = ['Apache-2.0']
vcsUrl = 'https://github.com/hathibelagal/LibraryTutorial.git'
websiteUrl = 'https://github.com/hathibelagal/LibraryTutorial'
}
configurations = ['archives']
}
步骤9:使用Bintray插件上传文件
再次打开Gradle Projects窗口并搜索bintrayUpload任务。 双击它即可开始上传文件。
任务完成后,打开浏览器访问Bintray软件包的详细信息页面。 您将看到一条通知,指出您有四个未发布的文件。 要发布这些文件,请单击发布链接。
4.从Bintray使用资料库
您的资料库现在可以作为Bintray软件包使用。 共享Maven存储库的URL以及组ID,工件ID和版本号后,任何开发人员都可以访问您的库。 例如,要使用我们创建的库,开发人员必须包含以下代码片段:
repositories {
maven {
url 'https://dl.bintray.com/eruzza/maven'
}
}
dependencies {
compile 'com.github.hathibelagal.librarytutorial:mylittlelibrary:1.0.1@aar'
}
请注意,在将repositories
添加为compile
依赖项之前,开发人员必须将您的存储库明确包含在存储库列表中。
5.将库添加到JCenter
默认情况下,Android Studio在名为JCenter的存储库中搜索库。 如果将库包含在JCenter存储库中,则开发人员将不必在其repositories
列表中添加任何内容。
要将库添加到JCenter,请打开浏览器,然后访问Bintray软件包的详细信息页面。 单击标记为添加到JCenter的按钮。
然后,您将进入可撰写邮件的页面。 您可以使用注释字段来选择提及有关该库的任何详细信息。
单击发送按钮开始Bintray的审阅过程。 一两天内,Bintray的人员将您的库链接到JCenter存储库,您将能够在软件包的详细信息页面上看到到JCenter的链接。
现在,任何开发人员都可以使用您的库,而无需更改repositories
列表。
结论
在本教程中,您学习了如何创建一个简单的Android库模块并将其发布到您自己的Maven存储库和JCenter存储库中。 在此过程中,您还学习了如何创建和执行不同类型的Gradle任务。
要了解有关Bintray的更多信息,请访问Bintray的用户手册 。
翻译自: https://code.tutsplus.com/tutorials/creating-and-publishing-an-android-library--cms-24582