# 光环助手Android客户端 ### APK打包配置 * 使用[ApkChannelPackage](https://github.com/ltlovezh/ApkChannelPackage)的方案 * 打包命令,视情况使用: > 打包Tinker基准包:`./scripts/tinker_release_base.sh` > 以Tinker基准包打渠道包:`./scripts/tinker_release_channel.sh` > 以Tinker基准包打补丁包:`./scripts/tinker_release_patch.sh` ### 混淆配置 * 配置文件:Android默认配置+proguard-rules.txt等 * 参考libraries下每个项目独立的配置文件`proguard-project.txt` ### apk大小优化 * 限制resConfig资源集 * 开启ShrinkResources * 开启混淆,使用minifyEnabled(仅在release开启) * pngquant对png压缩、png/jpg->webp(未尝试) ### 第三方appkey等配置 * 修改`gradle.properties`文件将各种key填入其中,实现统一管理 * 通过gradle文件内的resValue/buildConfigField/manifestPlaceHolder方式实现编译期间修改,具体情况请参考``./build.gradle``和``./app/build.gradle``配置 ### 拉取代码步骤 1. 拉取主项目代码: `git clone -b dev git@gitlab.ghzhushou.com:halo/assistant-android.git` 2. 初始化公用类库: `bash ./scripts/submodules_init.sh` ### submodule管理方式(只拉取master) * 提交代码,需要cd到submodule文件夹去做修改 * 更新远端代码,`bash ./scripts/submodules_update.sh` ### TODO * GSON 序列化用统一的一个, GsonUtil fromJson * CleanApkAdapter 转化字符串size工具函数 比如SpeedUtils * getString 解决 字符串hardcode问题 * ~~Adapter 里面clicklistener 用接口传参将点击操作委托给controller~~ * ~~Adapter ViewHolder的功能,部分重写到ViewHolder类本身~~ * ~~activity 统一入口未完成(外部入口相关),去除多余activity使用,统一toolbar~~ * ~~release / debug compile不同的类库,不需要再做什么开关~~ * ~~Toolbar分离,有图形按钮/没有图形按钮~~ ### TODO Since 3.1 - 解决 Utils 工具类引发的内存泄漏问题 - 把原有 EventBus 的消息 Type 统一到一个文件内 - 将实现细节从 View(Fragment、Activity) 剥离并以 MVVM 结构改造 - ~~将 ListViewModel 所对应的 ListRepository 合并到 ListViewModel 中~~ - 依照光环助手界面功能以大模块 - 小模块的方式去修改包结构,包内文件建议以包名摘要作为前缀 - ~~使用 RxJava 的 Debounce 和 Map 操作优化搜索触发机制 参考资料:[1](https://proandroiddev.com/building-an-autocompleting-edittext-using-rxjava-f69c5c3f5a40),[2](https://medium.com/@kurtisnusbaum/rxandroid-basics-part-2-6e877af352)~~ - ~~把 ListViewModel 的数据结构类型转换方式换为抽象方法,让继承的类实现,避免出现无响应的问题~~ - ~~rxjava2 如果接口返回为空 会发生异常:java.lang.NullPointerException: Null is not a valid element (答案编辑) 解决方法->com.gh.gamecenter.retrofit.Response~~ - constraintLayout 1.1.2 导致布局出现异常(问题编辑标签选择弹窗) - 搞清楚 GameManager 的用途,看能不能去掉 - 重构一下 MainActivity