热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何制作开源依赖库上传至GitHub供他人使用

背景在项目开发中经常会使用别人的第三方依赖库,在之前的Eclipse时代,基本都是通过拷贝jar包引入到工程中去使用。现如今大部分Android开发者

背景

在项目开发中经常会使用别人的第三方依赖库,在之前的Eclipse时代,基本都是通过拷贝jar包引入到工程中去使用。现如今大部分 Android开发者都开始使用Android Studio工具进行开发,只需要在项目下的build.gradle文件中添加依赖,就可以完成第三方依赖库的引用。

大多数情况都是使用别人的依赖库,那么我们为什么就不能考虑自己也写个依赖库让别人使用呢?在此前,我们需要知道如何才能将自己的库上传给别人使用。以下我就介绍一种上传到JitPack让别人使用的方式。


集成

1、创建一个Library

在创建的Project工程中新建一个Module:

项目工程右键 -> New -> Module -> Android Library -> 给库命名如ToastLibrary

然后我们就可以创建一个Module

2、在新建的Module中添加需要提供的依赖文件

我们在这里添加了一个自定义的吐司工具类ToastUtil

注意:如果我们已经有了项目工程时需要将其打包成依赖库,那么就需要将原工程中的核心代码转移到Module中,比如一些接口、工具类、公共的封装类等,原工程只保留UI相关以及封装框架的使用。尤其要注意的一点是不要将Application移过去,如果在Application中已经写了一些通用的方法,如定义了如下方法:

public static void runOnUiThread(Runnable task) {mainHandler.post(task);
}

解决方法是在Module中新增一个静态类,比如我这里命名是ToastInitializer,它用于完成Application的职责。ToastInitializer静态类中有一个initializer方法,要求在使用这个依赖库时必须在ApplicationonCreate方法中调用一次ToastInitializer.initializer(this)Context传进来。

public static void initializer(Context context) {if (null != context) {appContext = context;}
}

其实这样的方式我们在使用依赖库时大部分都有遇到过。使用友盟推送SDK时,要求你在ApplicationonCreate方法中调用一次PushAgent.getInstance(this);使用百度地图SDK时,要求你在ApplicationonCreate方法中调用一次SDKInitializer.initialize(this);是不是感觉似曾相识?这些都是为了实现类似的功能,那就是传递app context。这样你在库中即使没有Application也可以随意使用app context来进行一些操作。又因为ToastInitializer是个静态类,所以在调用ToastInitializer.initializer(this)时就会加载这个类,也就是在Application初始化时app context就会传进去,ToastInitializer类里的静态块会比别的类和方法先执行。

如果需要在原工程中引用库中的方法,需要在原工程的build.gradle中添加如下内容:

dependencies {compile project(path: ':toastlibrary')
}

其中toastlibrary是你的类库名称。

3、上传依赖库至GitHub

Library库完成后需要将其上传至GitHub中,具体上传方式见我另一篇博客Android Studio中Git的使用。

4、Releases Github Project

GitHub中打开提交的依赖库,点击releases -> 创建新版本Create a new release -> 填写版本号、发布标题、版本描述,然后进行推送版本Publish release

点击releases

创建新版本

推送版本

看到以下这样的页面表示推送成功。

这里写图片描述

5、添加到JitPack

打开JitPack官网 https://jitpack.io/ 地址,输入GitHub中对应的项目地址,点击Look up在查询得到的版本中点击需要版本号的Get it完成依赖库的生成。

生成依赖库

然后就可以看到使用方法了,接下来就可以按照它的使用方法在我们的项目上使用这个依赖库了。

使用方法

6、项目中集成依赖库

在项目根目录的build.gradle添加以下代码:

allprojects {repositories {jcenter()maven { url 'https://jitpack.io' }}
}

app目录的build.gradle添加依赖引用:

dependencies {compile 'com.github.wiggins9629:Toast:v1.0.1'
}

如果依赖库需要app context来进行一些初始化操作,那么还需要在项目Application中的onCreate方法中添加ToastInitializer.initializer(this)来传递app context:

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();ToastInitializer.initializer(this);}
}

至此我们就完成项目依赖库的集成了,可以在项目中调用依赖库的方法了。

public class MainActivity extends BaseActivity implements View.OnClickListener {private TextView mTvToast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setListener();}private void initView() {mTvToast = (TextView) findViewById(R.id.tv_toast);}private void setListener() {mTvToast.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_toast:ToastUtil.showText("测试Toast依赖库的集成");break;}}
}

需要注意的是可能会出现离线的问题,需要设置一下非离线状态,把Offline work给去掉,再同步一次工程就可以了。

非离线状态设置

以上就是通过Android Studio制作开源依赖库上传至GitHub供他人集成使用的过程,希望能给大家带来帮助!

下面是此依赖库的项目工程,欢迎大家参考指教。

项目地址 ☞ 传送门


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文详细介绍了将android工作项目打包为jar文件的方法及步骤。通过选择jar file和src文件夹,可以将项目打包为jar文件,并导入到其他项目的libs中作为库文件使用。对于涉及到资源文件的情况,仍在研究中。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
author-avatar
福田商务汽车-日照方傲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有