###日志系统
日志系统要完成以下几个功能:
1、Debug时的日志需求
2、日志写入文件的需求,方便上线查看
3、日志上报
4、日志加密
系统日志监控:日志奔溃信息监控
修改医行者中的日志系统可以达到需求, 也可以修改Github开源项目格式化日志输出项目: Logger 和 日志收集项目:Log 达到要求。
网络系统
Gitbub: OkHttphttps://github.com/square/okhttp
OkHttp封装:HttpGet、HttpPost、File Upload,OKHttp的使用要求创建Request,填写RequestBody。参照医行者Messaage的封装形式,将创建Request的过程进行封装,由最简单的请求信息和回调接口构成一个Message,并对Message进行统一处理。
本地存储
本地存储要解决的问题:
1、数据库存储
2、数据库的版本管理:版本升级、数据迁移等
参考:Hibernate的ORM思想
第三方框架:
GreenDAO
Android Sqlite orm 的 db 工具类
项目地址:https://github.com/greenrobot/greenDAO
文档介绍:http://greendao-orm.com/documentation/
官网网址:http://greendao-orm.com/
GreenDao使用方式
创建 “Green Dao Generation Project” 来生成 entities and core classes( DaoMaster, DaoSession .etc);
在Android Project中使用生成的Dao,
GreenDao生成:
public static void main(String[] args) throws Exception {、
// 这两个参数是:数据库版本号和schema名称
Schema schema = new Schema(1000, “de.greenrobot.daoexample”);
addNote(schema);
//addCustomerOrder(schema);
// 生成类,同时可以指定java文件位置
new DaoGenerator().generateAll(schema, “…/DaoExample/src/main/java”);
}
private static void addNote(Schema schema) {
Entity note = schema.addEntity(“Note”);
note.addIdProperty();
note.addStringProperty(“text”).notNull();
note.addStringProperty(“comment”);
note.addDateProperty(“date”);
}
针对版本升级的问题,GreenDao也有合适的解决方式:
数据库版本升级问题:
public DevOpenHelper(Context context, String name, CursorFactory factory) {
super(context, name, factory);
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i(“greenDAO”, “Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables”);
//dropAllTables(db, true);
//onCreate(db);
// to do update database
Android Project和Java Generate整合可参考: 整合 http://www.open-open.com/lib/view/open1438065400878.html
以上是从官方文档上大致看下来的结果,该开源项目在业界评价甚高,使用的人也不在少数。
####Test模块
Android单元测试
robolectric
项目地址:https://github.com/robolectric/robolectricDemo 地址:https://github.com/robolectric/robolectricsample文档介绍:http://robolectric.org/
特点:(1). 不需要模拟器在一般 JVM 就可以运行测试用例(该框架在Java层实现了一套接口模拟Android,所以可以直接在JVM上跑Android Unit Test)
(2). 能完成在真机上的大部分测试包括感应器
其他的测试用例及相关模块 Mock 可见:android-mock, mockito, easy-mock
####robolectric
举个例子:
Andorid中的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView)findViewById(R.id.textView1);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, SecondActivity.class));
}
});
}
对应的测试类,MainActivityTest的代码:
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@Test
public void testMainActivity() {
MainActivity mainActivity = Robolectric.setupActivity(MainActivity.class);
mainActivity.findViewById(R.id.textView1).performClick();
Intent expectedIntent = new Intent(mainActivity, SecondActivity.class);
ShadowActivity shadowActivity = Shadows.shadowOf(mainActivity);
iew1).performClick();
Intent expectedIntent = new Intent(mainActivity, SecondActivity.class);
ShadowActivity shadowActivity = Shadows.shadowOf(mainActivity);