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

2023-05-16

背景

在项目开发中经常会使用别人的第三方依赖库,在之前的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 {

    @Override
    public void onCreate() {
        super.onCreate();
        ToastInitializer.initializer(this);
    }
}

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

public class MainActivity extends BaseActivity implements View.OnClickListener {

    private TextView mTvToast;

    @Override
    protected 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);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tv_toast:
                ToastUtil.showText("测试Toast依赖库的集成");
                break;
        }
    }
}

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

非离线状态设置

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

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

项目地址 ☞ 传送门

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何制作开源依赖库上传至GitHub供他人使用 的相关文章

  • 【Java】java | 将可运行jar打包成exe可执行文件

    一 说明 1 javafx桌面程序 xff0c 但又不想安装jre环境 2 需要将可执行jar打包成exe 3 使用工具exe4j 二 操作步骤 1 下载exe4j https exe4j apponic com 2 安装 说明1 xff1
  • Python中的下划线

    目录 单个下划线 xff08 xff09 单下划线前缀的名称 双下划线前缀名称 前后都带双下划线名称 单个下划线 有3种情况 返回交互解释器中最后一次执行语句的结果 span class token operator gt gt span
  • 学完c再学python简单吗,可以先学python再学c吗

    python学好了之后是不是学c语言就简单了 C比较难 xff0c 学了python 还是比较难 xff0c 因为python比较简单 你会不习惯 应该说 xff0c 学了C后 xff0c 学python会觉得比较方便易用 我也不会画窗体
  • 关于堆栈的讲解(我见过的最经典的)

    转 https blog csdn net yingms article details 53188974 这是一篇转发的文章 xff0c 我对他进行了格式化而已 xff0c 原文出处不详 一 预备知识 程序的内存分配 一个由c C 43
  • 驼峰命名法等命名规范

    人们交流靠各种语言 xff0c 每行都有每行的所谓的 行话 程序员也不例外 xff0c 众所周知 xff0c 程序员都是用代码进行交流的 那么除了在代码中的注释之外 xff0c 程序员如何读懂别人的程序呢 xff1f 当然 xff0c 程序
  • bootloader的简单介绍以及uboot

    先给自己打个广告 xff0c 本人的微信公众号正式上线了 xff0c 搜索 张笑生的地盘 xff0c 主要关注嵌入式软件开发 xff0c 股票基金定投 xff0c 足球等等 xff0c 希望大家多多关注 xff0c 有问题可以直接留言给我
  • Docker的安装配置及基础学习

    Docker的安装 span class token comment 1 卸载旧版本 span yum remove span class token function docker span span class token punctu
  • pixhawk无法校准加速度计解决-震动太大

    pixahwk4 报错accelemeter inconsistent xff0c 校准加速度计时也没反应无法校准 xff0c 一直停在下面这个界面无法自动识别校准 等很长时间后 xff0c 就显示calibration failed re
  • C++ unordered_map

    转载自 这里 目录 查找元素 迭代器 容量 修改操作 通接口 哈希策略 观察器 std swap std unordered map std erase if std unordered map 简介 本篇博客介绍C 43 43 常用的无序
  • C++中stringstream如何判断流中是否为空

    学习自 StackOverflow 方法1 xff1a ss rdbuf gt in avail code include lt sstream gt include lt iostream gt using namespace std i
  • 为什么说C++引入的强制类型转换比C风格的强制类型转换更安全?

    我目前只体会到两种转换更安全 xff0c static cast和dynamic cast 首先static cast xff0c static cast只能在有 相互联系的类型 中进行相互转换 xff0c 这个相互联系就很微妙 xff08
  • 1000瓶药水,一瓶有毒,用10只老鼠来判断到底是哪一瓶

    1 方法1 xff0c 二分搜索 500 250 125 63 32 16 8 4 2 1 假设毒性在一个小时才会发作 xff0c 这样可以用10只老鼠来判断 xff0c 但是在灌入250瓶的时候 xff0c 必须等灌入500瓶的结果 xf
  • TCP中time_wait解释及解决方法

    首先是四次挥手断开连接的状态变化图 总的来说 xff0c 主动关闭连接的一方才会进入TIME WAIT状态 客户端主动关闭连接时 xff0c 会发送最后一个ack后 xff0c 然后会进入TIME WAIT状态 xff0c 再停留2个MSL
  • git基本命令

    git branch a 显示所有的分支 xff08 本地 43 远程 xff09 git branch 显示本地分支 git branch r 显示远程仓库分支 git checkout Bran 切换到分支 git branch Bra
  • JDK+Maven环境配置

    1 下载JDK8并安装 2 下载Maven 3 配置maven vim bash profile 打开bash配置文件 export Maven 61 34 usr local ApacheMaven 34 export PATH 61 3
  • java中调用scala

    下载scala的SDK 包 xff0c https www scala lang org download all html 注意下载与pom文件中依赖对应的版本 xff0c 解压至指定文件夹 在 bash profile中配置环境变量 s
  • 2018北航计算机 北理工计算机夏令营经验分享

    今天是9月28日 xff0c 推免系统的流程也都完成 xff0c 最终一切也都尘埃落定 之前在网上看到过许多学长学姐的经验分享贴 xff0c 今天所有的事情结束之后 xff0c 也趁还记着 xff0c 就把我的经历也写下来 xff0c 供以
  • 在线教育-谷粒学院学习笔记(九)

    文章目录 1 内容介绍2 搭建项目前台环境NUXT3 整合项目首页4 nuxt路由5 首页数据banner显示 初始配置6 首页数据banner显示 接口7 首页数据banner显示 前端实现8 首页数据显示 热门课程和名师9 Redis复
  • plotjuggler实时绘制ros topic数据流

    ros里安装plotjuggler用 xff1a sudo apt install ros melodic plotjuggler ros 不要用 xff1a sudo apt install ros melodic plotjuggler
  • 汉语拼音码

    汉字拼音首字母列表 本列表包含了20902个汉字 用于配合 GetChineseSpell 函数使用 本表收录的字符的Unicode编码范围为19968至40869 summary gt private static string strC

随机推荐

  • Futaba SBUS协议解析

    Futaba SBUS协议解析 S bus为futaba使用的串行通信协议 实际上为串口通信 但是有几点需要注意 xff1a 在大端小端上 xff0c 网上资料都说的不是很清楚 xff1b 跟TTL串口信号相比 xff0c S bus的逻辑
  • ubuntu 暂时不能解析域名

    错误 1 http security ubuntu com ubuntu xenial security main amd64 curl amd64 7 47 0 1ubuntu2 18 暂时不能解析域名 cn archive ubuntu
  • 全局变量和局部变量的区别

    全局变量和局部变量是面试时常问的问题之一 xff0c 我曾在夏令营面试和就业面试中不止一次的被问到 在这里我总结归纳一下两者的区别 在内存中的区别 这是最重要的区别 全局变量 xff08 外部变量和静态变量 xff09 保存在内存的全局存储
  • Ubuntu18安装成功后 显示未找到wifi适配器

    因为这个问题 xff0c 耽误了好久好久的任务进度 xff0c 搞得爆粗口了好几天 xff0c 最后差点放弃了 但凭着一丝不放弃精神 xff0c 终于解决问题了 总结一些我遇到的问题 xff0c 希望能帮助恼火的朋友们节省宝贵的时间 我尝试
  • px4添加自定义消息进行仿真数据采集

    第一步 xff1a 添加一个新topic 将想要采集模块的数据信息声明成自定义的uORB消息 xff1a 在PX4 msg目录下新建一个格式为 xff1a xxxx msg xff0c 定义消息结构 xff0c 将消息记录到日志当中 简单例
  • 如何将ros下sensor_msgs.msg的Image转换为array

    使用ros numpy package Tools for converting ROS messages to and from numpy arrays Contains two functions arr 61 numpify msg
  • visdom

    跑强化学习代码 xff0c 训练曲线用到visdom Ubuntu下输入指令python m visdom server 一直是Downloading scripts this may take a little while xff0c 无
  • latex表格居中和表格内容居中

    begin table caption Table captions should be placed above the tables label tab1 begin tabular l l l hline Heading level
  • 自动化环境搭建pytest+allure

    pytest安装 安装pytest pip install pytest 61 61 4 0 2 pip install pytest html 生成html测试报告 Allure搭建 1 下载Allure安装包 xff0c 找到对应版本
  • gazebo model的sdf文件中的uri路径

    让我们先看一个gazebo模型的sdf文件iris depth camera down sdf lt sdf version 61 39 1 5 39 gt lt model name 61 39 iris depth camera dow
  • adb连接不上手机测试设备

    问题 xff1a 解决 cannot connect to 5555 由于目标计算机积极拒绝 xff0c 无法连接 10061 解决办法 xff08 Windows 43 R xff1a cmd环境 xff09 1 连接USB数据线 xff
  • navicat连接本地mysql数据库报1251(版本问题)

    本地数据库服务已经启动 xff0c navicat连接本地数据库出现如下错误 xff0c 一般首次使用或下载新版本navicat会出现 xff0c 因为我下载的10 0版本 xff0c 它采用新的保密方式 xff0c 与默认旧版本5 0不同
  • oracle中的违反完整性约束条件问题

    在用sql语句创建表时 xff0c 出现了下列问题 xff1a 在这 xff0c 把这个问题出现的原因总结一下 xff1a 1 数据类型长度不一致 A表中的外键字段和B表中的被外键关联的字段数据类型或长度不一致 由此产生了问题 xff0c
  • python web快速建站基础

    1 Django基础 Django是一个开放源代码的Python Web应用框架 xff0c 由Python写成 xff0c 采用了MVT的框架模式 xff0c 即模型M xff0c 模板T和视图V 1 1 MVT 与MVC模式类似 xff
  • pycharm报找不到模块问题

    在学习python数据可视化时 xff0c 用到库特性时 xff0c 例如csv xff0c 总是提示类似 module csv has no attribute writer 的问题 xff0c 后来发现把这些库的文件夹名字改为 csv1
  • Linux 安装配置Docker 和Docker compose 并在docker中部署mysql和中文版portainer图形化管理界面

    Linux 安装配置Docker 和Docker compose 并在docker中部署mysql和中文版portainer图形化管理界面 首先环境准备 xff1a 下载Ubuntu20 04 4版本并打开vmare16虚拟机 xff08
  • Android设备获取wifi下的ipv6地址

    ipv6技术逐渐普及并得到广泛的应用 xff0c 很多企业也开始部署自己的ipv6网络 xff0c 很多终端也开始支持ipv6技术 遗憾的是 xff0c android虽然得到广泛普及 xff0c 但android并没有原生支持ipv6 可
  • 程序猿的情话

    世界上最遥远的距离 xff0c 是我在if里你在else里 xff0c 似乎一直相伴又永远分离 xff1b 世界上最痴心的等待 xff0c 是我当case你是switch xff0c 或许永远都选不上自己 xff1b 世界上最真情的相依 x
  • Kinect v2相机标定

    Kinect2 相机标定 到手kinect v2相机 xff0c 和已有的ur3双臂组装一体 xff0c 实现物体识别和物体抓取 xff0c 在相机使用之前需先进行相机标定 xff0c 在此记录下相机标定的过程 为什么要进行相机标定 相机作
  • 如何制作开源依赖库上传至GitHub供他人使用

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