/WeiBoDemo

Architecture Components Practice Tested for WeiBo Apis. MVVM + Retrofit + Rxjava2 + Dagger2 + Room + LiveData

Primary LanguageJava

RapidDvpt

RapidDvpt项目持续集成 采用谷歌 AppArchitecture 作为实践,借助微博api快速迭代客户端。

App架构设计

技术选型

  • 设计模式:MVVM
  • 依赖注入:Dagger2
  • 网络处理:Retrofit + Rxjava2
  • 数据库管理:Room

项目基础结构

  • 最上层-壳App,集成(component组件1,component组件2...)
    • 组件层-component(component组件xxx)
      • 组件服务层-componentservice(提供组件公用服务)
        • 组件依赖层-这部分是同底层lib抽离独立,专门处理组件间业务交互所提供的依赖工具
          • basiclib-基础sdk(包含第三方开源库+私有工具类)
          • basicres-基础资源(处理公用的基础资源)

模块内设计

优秀文章链接

模块化设计

  1. 第三方依赖统一管理 配置dependencies.gradle,里面统一配置依赖版本及公用变量定义。
  2. 模块资源命名冲突 在每一个子模块的build.gradle加上对应资源文件标识符resourcePrefix "xxx_"前缀,建议xxx以模块名命名即可。
  3. App模块通过buildWithOtherModule动态build其他模块,module模块通过buildModule打开是否作为module使用。
  4. 开源库的代码隔离设计(待补充)

DI管理-Dagger2

  1. Scope的实践

  2. @Module 有两个注解元素 include subcomponents include:其他module类 subcomponent:子component中的module类

  3. @Component 只能获取到Component暴露出来的对象,比如dependencies一个BaseComponent,如果BaseComponent没有显示申明暴露对象,则无法获取得到

  4. @Subcomponents,则效果和dependencies一样,则是BaseComponent

  5. inject(X x),为x提供依赖

  6. Dagger2多module实践

  7. DaggerComponent为主壳app注入

  8. AppComponent为主module注入

打包构建

构建环境 ubuntu14 + Jenkins 软件版本 JDK1.8 + Gradle4.1 + Androidsdk 使用Gradle脚本打包githubs项目,打包成功之后Email通知

  1. 下载jenkinis.war包,java -jar jenkins.war --httpPort=<yourPort>指定端口运行Jenkins。
  2. 下载JDK1.8,Gradle,Androidsdk,配置环境变量。 打开编辑配置文件
    vim /etc/profile
    
    添加一下变量到配置文件

    #set gradle export GRADLE_HOME=/root/workspace/gradle/gradle-4.1 export PATH=${PATH}:${GRADLE_HOME}/bin #set androidsdk export ANDROID_HOME=/root/workspace/android/sdk/android-sdk export PATH=${PATH}:${ANDROID_HOME}/tools export PATH=${PATH}:${ANDROID_HOME}/platforms-tools #set jdk export JAVA_HOME=/root/workspace/java/jdk1.8.0_151 export CLASSPATH=.:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$PATH 当前会话配置生效

    source /etc/profile
    

文章参考 Ubuntu jenkins搭建 Ubuntu下jenkins+gradle+Android自动打包 编译时替换资源 - Android重叠包与资源合并一见 Android Studio Gradle实践之多渠道自动化打包+版本号管理

九宫格 https://jaeger.itscoder.com/android/2016/03/06/nine-grid-iamge-view-libaray.html

Storing Java objects other than primitive types in Room Database https://medium.com/@amit.bhandari/storing-java-objects-other-than-primitive-types-in-room-database-11e45f4f6d22

http://www.open-open.com/jsoup/