Android 应用程序快速开发框架
用于快速开发Android应用程序的模板项目,集成常用第三方依赖,各种封装,各种工具类,开箱即用,方便你快速开发出优质的APP
- BaseActivity封装
- BaseFragment封装
- Android 4.4 + 沉静式控制封装
- Android 5.0 + 状态栏隐藏封装
- Android 5.0 + 导航栏隐藏封装
- Android 6.0 + 权限请求封装
- Android 6.0 + 状态栏图标明暗切换封装
- 全局异常捕获
- 异常信息收集
- ViewPager Adapter
- 万能的 RecyclerView Adapter (来自 BaseRecyclerViewAdapterHelper )
- REST ful API 网络请求封装 ( OkHttp + Retrofit )
- 网络请求返回统一处理
- 网络请求线程调度封装 ( RxJava / RxAndroid )
- 网络请求日志打印
- 网络请求与 Activity/Fragment 生命周期绑定 ( ViewModel )
- 线程池 ( Worker )
- scheme 外部启动拦截
- 闪屏 Activity
- 状态栏占位
- Loading 加载框
- Toast 消息提示
- JSON 序列化反序列化工具类 ( GSON )
- 像素单位转换工具类
- SharedPreferences 轻量数据储存封装
- 字符串工具类
- 手机号码正则
- APP 版本号获取
- APP 版本更新检查
- APP 新版本下载
- APP 新版本安装
- Glide 图片加载集成
- CircleImageView 圆形图片集成
- Java Lambda 表达式支持
- Dex 拆分支持
- APK 打包特性配置
- APK 打包文件名带日期时间
- 兼容 Android 8.0+ HTTP 网络请求方式
- 点击此项目的 release 板块或点击此处前往下载
- 修改项目名
- 修改包名 ( Android Studio 快捷键 Shift + F6 )
- 修改 Subs 类中的请求状态码判断 ( 根据需求 )
- 修改 app/build.gradle 中的特性配置
- 修改 Androidmanifest.xml中的 scheme 协议名称
- 修改 Prefer ( SharedPreferences ) 工具类中的储存文件名称
- 修改项目的 Git 目标地址
- 然后尽情享用吧
- 启用了 DataBinding
- 架构模式变更为 MVVM
- 移除一些无用的代码
- 更改了网络请求返回处理的构造方法参数传递,现在可以根据传入的参数控制是否显示对话框或加载框了
- 新增了下载方法,方便下载更新包,下载中可获取下载进度,文件总大小等
- 新增了下载文件跳转安装的方法,下载完更新包直接打开安装,节省编码时间
- 更改了部分包结构
- 更改了部分依赖项
- 其他一些调整请自行查看
- 移除事件总线依赖 ( Otto ) 原因是因为在部分手机上发现其存在某些问题,当然EventBus也同样,不推荐使用事件总线的方式,(滥用)这会是你的代码逻辑难以理解,并且会出现相当一部分问题
- 移除Otto工具类
- 移除 exceptions.crash 包下的 NoSignException 类,并删除 ExceptionHandle 类的 NoSignException 异常处理方法,需要则自行添加
- 修改 BaseActivity & BaseFragment 权限请求的回调参数传递,详细修改细节请往下
- 修改线程池的初始化创建方式,由原来的静态初始化修改为手动调用初始化,可选线程池类型,类名变更为 Worker
- 原 beans 包下的 SystemUIVisibility 类变更到 ui.base.config 包下
- 修改默认消息提示方式由原来的 Notice 变更为 Toast
- utils 包下的所有工具类统一添加 Utils 后缀
迁移Android支持库引用到AndroidX
- 升级OkHttp3 ( 3.14.0 -> 3.14.2 )
- 升级Retrofit2 ( 2.4.0 -> 2.6.0 )
- 升级Retrofit2:converter-gson ( 2.4.0 -> 2.6.0 )
- 升级Retrofit2:adapter-rxjava2 ( 2.4.0 -> 2.6.0 )
- 升级RxJava2 ( 2.2.8 -> 2.2.9 )
- 升级RxLifecycle2 -> RxLifecycle3 ( 2.2.2 -> 3.0.0 )
- 升级ButterKnife ( 9.0.0 -> 10.1.0 )
- 升级ButterKnife-Compiler ( 9.0.0 -> 10.1.0 )
- 升级Glide ( 4.8.0 -> 4.9.0 )
- 升级Glide-Compiler ( 4.8.0 -> 4.9.0 )
- 升级Glide-Transformations ( 3.0.1 -> 4.0.1 )
- 移除android.support.v4包
- 移除日志打印 ( com.orhanobut.logger )
- 移除下拉刷新上拉加载支持 ( SmartRefreshLayout & SmartRefreshHeader )
- 移除Banner
- Activity / Fragment
/**
* 继承自 BaseActivity / BaseFragment
*/
public class SimpleActivity extends BaseActivity<ActivitySimpleBinding> {
@Override
protected void onSystemUIVisibility(SystemUIVisibility config) {
super.onSystemUIVisibility(config);
// Activity 的初始化样式配置,仅在需要时做针对修改
// 默认沉浸式,不隐藏状态栏
// 部分刘海屏在隐藏状态栏的情况下会出现状态栏黑条的情况,所以默认不隐藏状态栏
// 暗色状态栏图标
config.setDarkStatusBar(false);
// 隐藏导航栏虚拟按钮
config.setHideNavigationBar(true);
// 隐藏状态栏
config.setHideStatusBar(false);
// 透明导航栏
config.setTranslucentNavigationBar(true);
// 透明状态栏
config.setTranslucentStatusBar(true);
}
@Override
protected int onLayout() {
// 指定 layout 资源,xml文件请按照标准的 databinding 格式包含 <layout></layout> 标记
return R.layout.activity_simple;
}
@Override
protected void onObject() {
// 初始化对象
...
// 权限请求示例
// 需要申请的权限数组
String[] permission = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
};
// 请求权限
// 在 BaseActivity/BaseFragment 中已经处理了Android的版本判断,所以这里直接调用即可
requestSelfPermission(permission, (authorize, permissions) -> {
if (authorize) {
// 全部授权成功
} else {
// 未全部授权成功
for (String s : permissions) {
Toast.show(String.format("权限%s授权失败", s));
}
// 全部授权成功的情况下 permissions 的 size 为 0 ,未全部授权成功的时候 permissions 包含的仅仅是未授权通过的权限,并不包含已经授权的权限
}
});
}
@Override
protected void onView() {
// 初始化View
// 直接使用 binding 去调用 id 即可
binding.tvTextView.setText("Hello World!");
// 设置状态栏图标颜色为暗色
setDarkStatusBar(true);
// 设置状态栏图标颜色为亮色
setDarkStatusBar(false);
}
@Override
protected void onData() {
// 初始化数据
// 网络请求
// 此处仅作为示例,实际不建议直接在Activity中处理
User user = new User();
user.setMobile("1234567890");
user.setSMSCode("123456");
Network.api().login(user)
.compose(Scheduler.apply())
// Subs构造参数可选参数控制是否显示加载框和提示信息
// 所有可选参数定义在 Subs 类中,如下:
// 全部显示(默认)
// public final static int MODE_SHOW_ALL = 0;
// 只显示加载框
// public final static int MODE_SHOW_LOADING = 1;
// 只显示提示信息
// public final static int MODE_SHOW_MSG = 2;
// 什么都不显示
// public final static int MODE_SHOW_NOTHING = 3;
.subscribe(new Subs<Object>(){
@Override
protected void onSuccess(Object data) {
/* 请求成功,此方法强制重写 */
}
@Override
protected void onFail() {
/* 请求失败,选择性重写 */
}
});
}
}
- 其他的基本都很简单了,就不一一举例了,毕竟代码注释还算看得过去,简单的看一下基本就会用了
如果大家有什么好的建议或意见可以说出来,让这个项目更加完善,我也会不断的补充和修改此项目,以达到更好的解决开发中的各种繁琐复杂的工作