项目作者: var-rain

项目描述 :
Android的快速开发模板,为了解决开发中的各种繁琐的操作
高级语言: Java
项目地址: git://github.com/var-rain/MaxAndroid-Java.git


MaxAndroid

Github release

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 目标地址
  • 然后尽情享用吧

更新日志

  • 3.0.0

  1. 启用了 DataBinding
  2. 架构模式变更为 MVVM
  3. 移除一些无用的代码
  4. 更改了网络请求返回处理的构造方法参数传递,现在可以根据传入的参数控制是否显示对话框或加载框了
  5. 新增了下载方法,方便下载更新包,下载中可获取下载进度,文件总大小等
  6. 新增了下载文件跳转安装的方法,下载完更新包直接打开安装,节省编码时间
  7. 更改了部分包结构
  8. 更改了部分依赖项
  9. 其他一些调整请自行查看
  • 2.0.1

  1. 移除事件总线依赖 ( Otto ) 原因是因为在部分手机上发现其存在某些问题,当然EventBus也同样,不推荐使用事件总线的方式,(滥用)这会是你的代码逻辑难以理解,并且会出现相当一部分问题
  2. 移除Otto工具类
  3. 移除 exceptions.crash 包下的 NoSignException 类,并删除 ExceptionHandle 类的 NoSignException 异常处理方法,需要则自行添加
  4. 修改 BaseActivity & BaseFragment 权限请求的回调参数传递,详细修改细节请往下
  5. 修改线程池的初始化创建方式,由原来的静态初始化修改为手动调用初始化,可选线程池类型,类名变更为 Worker
  6. 原 beans 包下的 SystemUIVisibility 类变更到 ui.base.config 包下
  7. 修改默认消息提示方式由原来的 Notice 变更为 Toast
  8. utils 包下的所有工具类统一添加 Utils 后缀
  • 2.0.0

  1. 迁移Android支持库引用到AndroidX
  2. 升级OkHttp3 ( 3.14.0 -> 3.14.2 )
  3. 升级Retrofit2 ( 2.4.0 -> 2.6.0 )
  4. 升级Retrofit2:converter-gson ( 2.4.0 -> 2.6.0 )
  5. 升级Retrofit2:adapter-rxjava2 ( 2.4.0 -> 2.6.0 )
  6. 升级RxJava2 ( 2.2.8 -> 2.2.9 )
  7. 升级RxLifecycle2 -> RxLifecycle3 ( 2.2.2 -> 3.0.0 )
  8. 升级ButterKnife ( 9.0.0 -> 10.1.0 )
  9. 升级ButterKnife-Compiler ( 9.0.0 -> 10.1.0 )
  10. 升级Glide ( 4.8.0 -> 4.9.0 )
  11. 升级Glide-Compiler ( 4.8.0 -> 4.9.0 )
  12. 升级Glide-Transformations ( 3.0.1 -> 4.0.1 )
  13. 移除android.support.v4包
  14. 移除日志打印 ( com.orhanobut.logger )
  15. 移除下拉刷新上拉加载支持 ( SmartRefreshLayout & SmartRefreshHeader )
  16. 移除Banner

代码演示

  • Activity / Fragment

    1. /**
    2. * 继承自 BaseActivity / BaseFragment
    3. */
    4. public class SimpleActivity extends BaseActivity<ActivitySimpleBinding> {
    5. @Override
    6. protected void onSystemUIVisibility(SystemUIVisibility config) {
    7. super.onSystemUIVisibility(config);
    8. // Activity 的初始化样式配置,仅在需要时做针对修改
    9. // 默认沉浸式,不隐藏状态栏
    10. // 部分刘海屏在隐藏状态栏的情况下会出现状态栏黑条的情况,所以默认不隐藏状态栏
    11. // 暗色状态栏图标
    12. config.setDarkStatusBar(false);
    13. // 隐藏导航栏虚拟按钮
    14. config.setHideNavigationBar(true);
    15. // 隐藏状态栏
    16. config.setHideStatusBar(false);
    17. // 透明导航栏
    18. config.setTranslucentNavigationBar(true);
    19. // 透明状态栏
    20. config.setTranslucentStatusBar(true);
    21. }
    22. @Override
    23. protected int onLayout() {
    24. // 指定 layout 资源,xml文件请按照标准的 databinding 格式包含 <layout></layout> 标记
    25. return R.layout.activity_simple;
    26. }
    27. @Override
    28. protected void onObject() {
    29. // 初始化对象
    30. ...
    31. // 权限请求示例
    32. // 需要申请的权限数组
    33. String[] permission = {
    34. Manifest.permission.READ_EXTERNAL_STORAGE,
    35. Manifest.permission.WRITE_EXTERNAL_STORAGE,
    36. };
    37. // 请求权限
    38. // 在 BaseActivity/BaseFragment 中已经处理了Android的版本判断,所以这里直接调用即可
    39. requestSelfPermission(permission, (authorize, permissions) -> {
    40. if (authorize) {
    41. // 全部授权成功
    42. } else {
    43. // 未全部授权成功
    44. for (String s : permissions) {
    45. Toast.show(String.format("权限%s授权失败", s));
    46. }
    47. // 全部授权成功的情况下 permissions 的 size 为 0 ,未全部授权成功的时候 permissions 包含的仅仅是未授权通过的权限,并不包含已经授权的权限
    48. }
    49. });
    50. }
    51. @Override
    52. protected void onView() {
    53. // 初始化View
    54. // 直接使用 binding 去调用 id 即可
    55. binding.tvTextView.setText("Hello World!");
    56. // 设置状态栏图标颜色为暗色
    57. setDarkStatusBar(true);
    58. // 设置状态栏图标颜色为亮色
    59. setDarkStatusBar(false);
    60. }
    61. @Override
    62. protected void onData() {
    63. // 初始化数据
    64. // 网络请求
    65. // 此处仅作为示例,实际不建议直接在Activity中处理
    66. User user = new User();
    67. user.setMobile("1234567890");
    68. user.setSMSCode("123456");
    69. Network.api().login(user)
    70. .compose(Scheduler.apply())
    71. // Subs构造参数可选参数控制是否显示加载框和提示信息
    72. // 所有可选参数定义在 Subs 类中,如下:
    73. // 全部显示(默认)
    74. // public final static int MODE_SHOW_ALL = 0;
    75. // 只显示加载框
    76. // public final static int MODE_SHOW_LOADING = 1;
    77. // 只显示提示信息
    78. // public final static int MODE_SHOW_MSG = 2;
    79. // 什么都不显示
    80. // public final static int MODE_SHOW_NOTHING = 3;
    81. .subscribe(new Subs<Object>(){
    82. @Override
    83. protected void onSuccess(Object data) {
    84. /* 请求成功,此方法强制重写 */
    85. }
    86. @Override
    87. protected void onFail() {
    88. /* 请求失败,选择性重写 */
    89. }
    90. });
    91. }
    92. }
  • 其他的基本都很简单了,就不一一举例了,毕竟代码注释还算看得过去,简单的看一下基本就会用了

最后

如果大家有什么好的建议或意见可以说出来,让这个项目更加完善,我也会不断的补充和修改此项目,以达到更好的解决开发中的各种繁琐复杂的工作