# 光环助手Android客户端 ### sourcesets/debug/release * https://developer.android.com/studio/build/build-variants.html#sourcesets ### 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 统一到一个文件内 - 明确 MVVM 中 Repository 及其衍生类的具体实现方式 - 将实现细节从 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 的数据结构类型转换方式换为抽象方法,让继承的类实现,避免出现无响应的问题