前言
搭建android项目框架前,我们需要先定义要框架的结构,因为android框架本身的结构就很复杂,如果一开始没定义好结构,那么后续的使用就会事倍功半。
结构如下:
com.kiba.framework
——activity 存储所有的活动
——base 存储baseActivity
——fragment存储所有的Fragment
——base 存储baseFragment
——service存储所有的service
——utils存储所有的工具类
——dto存储所有的传入传出实体
——model存储所有的实体类
——model_db存储所有的数据库实体类(框架使用ormlit)
创建项目
我们先创建一个项目,File—New—New Project,选择BasicActivity。
然后创建一个utils文件夹。
添加LogUtils,DateUtils,DecimalUtil文件,就是简单的日志输出,日期,字符串工具。(写法很多,可以上网任意搜索)。
然后创建一个异常捕获文件——CrashExceptionHandler,用于输入未捕获异常日志(写法很多,可以上网任意搜索)。
然后打开app下的gradle,引入我们常用的包。
网络请求:okhttp。
json处理:gson和fastjson。
黄油刀注解:ButterKnife。
内置数据库管理:ormlite。
权限请求:rxpermissions。
图片处理:glide。
代码如下:
//okhttp implementation "com.squareup.okhttp3:okhttp:4.9.0" //gson implementation 'com.google.code.gson:gson:2.8.6' //fastjson implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.83' //解决超过65546代码的问题 implementation 'com.android.support:multidex:1.0.2' implementation "com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4" //ButterKnife implementation 'com.jakewharton:butterknife:10.2.3' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3' // 数据库ormlite implementation 'com.j256.ormlite:ormlite-android:5.0' implementation 'com.j256.ormlite:ormlite-core:5.0' //权限请求rxpermissions implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar' //图片处理glide implementation 'com.github.bumptech.glide:glide:4.14.2' annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'//运行时 编译时 处理注解
然后在添加一些json和http的utils(写法很多,可以上网任意搜索)。
然后创建MyApplication的java文件,代码如下:
public class MyApplication extends Application { public static Context context;//全局上下文 public static List<Activity> activityList = new ArrayList<Activity>(;//用于存放所有启动的Activity的集合 public static ApplicationInfo applicationInfo; @Override public void onCreate( { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"; Log.d("项目启动", "项目启动: " + DateUtils.getTime(; super.onCreate(; context = getApplicationContext(; PackageManager packageManager = getApplicationContext(.getPackageManager(; try { packageManager = getApplicationContext(.getPackageManager(; applicationInfo = packageManager.getApplicationInfo(getPackageName(, 0; } catch (PackageManager.NameNotFoundException e { applicationInfo = null; LogUtils.LogHelperError("获取applicationInfo报错", e; } CrashExceptionHandler.getInstance(.init(this; //解决4.x运行崩溃的问题 MultiDex.install(this; } private boolean isDebug( { return BuildConfig.DEBUG; } public static String GetProperties(String propertyName { Properties props = new Properties(; String serviceUrl =