背景
在项目开发中经常会使用别人的第三方依赖库,在之前的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方法,要求在使用这个依赖库时必须在Application的onCreate方法中调用一次ToastInitializer.initializer(this)把Context传进来。
public static void initializer(Context context) {
if (null != context) {
appContext = context;
}
}
其实这样的方式我们在使用依赖库时大部分都有遇到过。使用友盟推送SDK时,要求你在Application的onCreate方法中调用一次PushAgent.getInstance(this);使用百度地图SDK时,要求你在Application的onCreate方法中调用一次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。
看到以下这样的页面表示推送成功。
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供他人集成使用的过程,希望能给大家带来帮助!
下面是此依赖库的项目工程,欢迎大家参考指教。
项目地址 ☞ 传送门
本文详细介绍如何使用Android Studio创建并发布自定义依赖库至GitHub及JitPack,包括库的创建、核心代码转移、依赖库上传及集成步骤。
1267

被折叠的 条评论
为什么被折叠?



