前篇《献给android原生应用层开发初学者技术架构选型和整合的方案思路(一)》

本篇侧重于安卓创建的创建和后续 demo 中用到的 lib 在 gradle 中的依赖配置,本文假设您已经安装并配置好 android studio和 SDK。

  • 创建项目
  1. 创建初始化 android 项目:打开 android studio -- File -- New Project。选择Phone And Tablet -- Add No Activity --Next.
  2. 在“Configure your project”面板,取好项目名称,定义好包名,分配项目保存路径,选择 Kotlin 为主要开发语言,最小API Level 为 16,android 4.1,不勾选“This project will support instant apps”。不勾选“Use AndroidX artifacts.
  3. androidX 为下一代支持包标准以替代 supports系列,暂时没到完全采用 X 系列的必要,本 demo 仍旧采用 supports系列的扩展包。点击 Finish,稍等片刻gradle初始化完成(为了依赖包下载顺利您可能需要利用酸酸乳等科学上网)。

  4. 创建 Default  Launcher Activity.

创建一个 package名为activities,专门用来存放所有的 activity,代码路径做好规划和分类。

在 com.demo.mvvm.activities 下右击 -- New -- Activity -- Empty Activity.弹窗中取消勾选 Generate Layout File,选中 Launcher Activity 作为启动项,勾选 Backwards Compatibility(AppCompat)以向后兼容。取名 LaucherActivity.语言为 Kotlin.如图所示:

Finish 后 IDE会在AndroidManifest.xml 里配置启动参数 xml 项,

<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

至此你的 app 可以编译到你的安卓设备或者模拟器中运行了。

  • 配置 Gradle lib 依赖

前篇文章中罗列的一些用到的组件库均通过 gragle 进行依赖,有关工程的 build.gradle和各个 app moudle build.gradle 的区别,请自行学习脑补。

  1. 在工程 build.gradle 中,allprojects -- repositories 中增加 maven { url "https://jitpack.io" }中央仓库,代码如下:

    allprojects {repositories {google()jcenter()maven { url "https://jitpack.io" }}
    }
  2. 在工程的 build.gradle中增加所有依赖的 lib 的版本号变量
        ext.kotlinVersion = '1.3.21'ext.mvrxVersion = '0.7.2'ext.supportLibVersion = '28.0.0'ext.buildToolsVersion = '28.0.3'ext.lifecycleVersion = '1.1.1'ext.robolectricVersion = '3.8'ext.epoxyVersion = '2.16.4'ext.moshiVersion = '1.6.0'ext.koinVersion = '0.9.3'ext.retrofitVersion = '2.5.0'ext.navVersion = '1.0.0-alpha09'ext.roomVersion = "1.1.1"ext.arouterRegisterVersion = '1.0.2'ext.arouterApiVersion = '1.4.1'ext.arouterCompilerVersion = '1.2.2'ext.rxAndroidVersion = '2.1.0'ext.rxJavaVersion = '2.2.4'ext.rxlifecycleVersion = '2.2.2'ext.autoDisposeVersion = '0.8.0'ext.rxPermissionsVersion = '0.9.5'ext.rxrelayVersion = '2.1.0'ext.fastandrutilsVersion = '1.0.0'ext.androidUtilCodeVersion = '1.22.10'ext.okhttpProfilerVersion = '1.0.4'ext.eventBusVersion = '3.1.1'ext.tDialogVersion = '2.1.1'ext.rxToolVersion = 'v2.2.8'ext.qmuiVersion = '1.1.12'ext.leakVersion = '1.6.3'ext.fragmentationVersion = '1.3.6'ext.eventBusActivityScopeVersion = '1.1.0'

    用不到的读者自行删减,不一一详细说明用处,版本号集中在一起可方便以后依赖库升级时更新版本号。其中 supports 系列的版本号用到的是28.0.0,autoDispose的版本用的是0.8.0,rxLifeCycle等等因为后续版本支持 androidX 系列库,版本高低都会有依赖编译错误,请读者自行爬坑。

  3. 在总工程 build.gradle的buildscript -- dependencies 中增加 Kotlin extensions for android 插件 lib,该 lib的作用是削减大量 findViewById这种获取控件对象的代码,知识请参阅《Kotlin-Android-Extensions:不仅仅是替代findViewById》,另外还在在具体的模块工程里面添加此插件引用,后续文章会提到。同时,下面配置也加入了阿里巴巴的 ARouter lib 的引用,在具体工作模块 build.gradle 也会有后续配置。

        dependencies {classpath 'com.android.tools.build:gradle:3.3.2'classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlinVersion"classpath "com.alibaba:arouter-register:$arouterRegisterVersion"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files}
  4. 到具体的模块,如 app 中,编辑 build.gradle文件。

1)在文件顶部添加kotlin-kapt Kotlin 提示插件,arouter插件以启用,连同原有的配置,代码如下:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.alibaba.arouter'

2)检查确保 compileSdkVersion和targetSdkVersion一样都为28,minSdkVersion为16,具体意义功能请自行脑补

3)增加 buildToolsVersion "$buildToolsVersion"

4)启用 multi-dex 以解决64k 的限制,在 android -- defaultConfig节点下添加multiDexEnabled true

5)添加arguments = [AROUTER_MODULE_NAME: project.getName()],此为 ARouter 库的要求,请查阅相关文章

6)其他一些配置项目,如androidExtensions -- experimental = true,compileOptions版本等等,代码如下

android {signingConfigs {}compileSdkVersion 28compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}defaultConfig {applicationId "com.demo.mvvm"minSdkVersion 16targetSdkVersion 28versionCode 1versionName "1.1.0"multiDexEnabled truejavaCompileOptions {annotationProcessorOptions {arguments = [AROUTER_MODULE_NAME: project.getName()]}}}buildToolsVersion "$buildToolsVersion"buildTypes {release {// 混淆minifyEnabled false// Zip align优化zipAlignEnabled true// 移除无用的resource文件
//            shrinkResources trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {minifyEnabled false}}//    dexOptions {
//        incremental true
//        javaMaxHeapSize '2g'
//    }
}androidExtensions {experimental = true
}

7)在 dependencies中添加所有用到的库的依赖,代码如下,您可以直接复制使用:

    implementation fileTree(include: ['*.jar'], dir: 'libs')// java jdk kotlin versionimplementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion", "org.koin:koin-android-architecture:$koinVersion")// support and compatible,lifecycle versionimplementation("com.android.support:appcompat-v7:$supportLibVersion", "com.android.support:recyclerview-v7:$supportLibVersion", "android.arch.lifecycle:extensions:$lifecycleVersion", "com.android.support.constraint:constraint-layout:1.1.3")// Airbnb company mvRx ,epoxy libsimplementation "com.airbnb.android:mvrx:$mvrxVersion"implementation("com.airbnb.android:epoxy:$epoxyVersion", { exclude group: 'com.android.support' })implementation 'com.android.support.constraint:constraint-layout:1.1.3'kapt "com.airbnb.android:epoxy-processor:$epoxyVersion"// rxjava rxandroidimplementation("io.reactivex.rxjava2:rxandroid:$rxAndroidVersion", "io.reactivex.rxjava2:rxjava:$rxJavaVersion")// retrofit okhttp3 with network,adapter for rxjavaimplementation("com.squareup.retrofit2:retrofit:$retrofitVersion", "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion", "com.squareup.okhttp3:logging-interceptor:3.9.0", "com.squareup.retrofit2:converter-gson:2.3.0")// navigator componentsimplementation("android.arch.navigation:navigation-fragment-ktx:$navVersion", "android.arch.navigation:navigation-ui-ktx:$navVersion")// ORMimplementation("android.arch.persistence.room:runtime:$roomVersion", "android.arch.persistence.room:rxjava2:$roomVersion")implementation 'com.android.support:multidex:1.0.3'// 生命周期相关 lifecyble adapter to rxjava  https://github.com/trello/RxLifecycleimplementation "com.trello.rxlifecycle2:rxlifecycle-components:$rxlifecycleVersion"implementation("com.trello.rxlifecycle2:rxlifecycle-kotlin:$rxlifecycleVersion", "com.trello.rxlifecycle2:rxlifecycle-android-lifecycle:$rxlifecycleVersion", "com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:$rxlifecycleVersion")// Uber company rxJava memory auto release libsimplementation("com.uber.autodispose:autodispose-android:$autoDisposeVersion","com.uber.autodispose:autodispose-android-archcomponents:$autoDisposeVersion","com.uber.autodispose:autodispose-kotlin:$autoDisposeVersion","com.uber.autodispose:autodispose-android-kotlin:$autoDisposeVersion","com.uber.autodispose:autodispose-android-archcomponents-kotlin:$autoDisposeVersion")// 权限申请implementation "com.tbruyelle.rxpermissions2:rxpermissions:$rxPermissionsVersion"// alibaba ARouterimplementation("com.alibaba:arouter-api:$arouterApiVersion", { exclude group: "com.android.support" })implementation "org.greenrobot:eventbus:$eventBusVersion"//两个android快速开发的工具类FastAndrUtils, androidUtilCode,功能会有部分重复//https://github.com/570622566/FastAndrUtils//https://blankj.com/2016/07/31/android-utils-code///https://github.com/Blankj/AndroidUtilCode
//    implementation "cn.hotapk:fastandrutils:$fastandrutilsVersion"implementation "com.blankj:utilcode:$androidUtilCodeVersion"//拦截器 需要在 android studio 插件中心下载 okhttpprofiler 插件监听 okhttp3的请求,可生成 entity对象implementation "com.itkacher.okhttpprofiler:okhttpprofiler:$okhttpProfilerVersion"//弹窗组件 https://github.com/Timmy-zzh/TDialogimplementation "com.timmy.tdialog:tdialog:$tDialogVersion"//RxTool UI 组件及库//基础工具库,//UI库// 相机库//功能库(Zxing扫描与生成二维码条形码 支付宝 微信)//ArcGis For Android工具库(API:100.1以上版本)implementation("com.github.vondear.RxTool:RxKit:$rxToolVersion", "com.github.vondear.RxTool:RxUI:$rxToolVersion","com.github.vondear.RxTool:RxCamera:$rxToolVersion", "com.github.vondear.RxTool:RxFeature:$rxToolVersion","com.github.vondear.RxTool:RxArcGisKit:$rxToolVersion")// 腾讯 UI组件,集合控件,手势操作等implementation("com.qmuiteam:qmui:$qmuiVersion"
//            "com.qmuiteam:arch:0.3.0",
//            "com.qmuiteam:qmuilint:1.0.1")//内存泄露检测debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakVersion"releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakVersion"// Optional, if you use support library fragments:debugImplementation "com.squareup.leakcanary:leakcanary-support-fragment:$leakVersion"implementation(
//            "me.yokeyword:fragmentation:$fragmentationVersion","me.yokeyword:fragmentation-core:$fragmentationVersion","me.yokeyword:fragmentation-swipeback:$fragmentationVersion","me.yokeyword:eventbus-activity-scope:$eventBusActivityScopeVersion")implementation "com.android.support.test.espresso:espresso-idling-resource:3.0.2"debugImplementation "com.amitshekhar.android:debug-db:1.0.4"testImplementation "junit:junit:4.12"androidTestImplementation "androidx.test:runner:1.1.1"androidTestImplementation "androidx.test.espresso:espresso-core:3.1.1"kapt "com.alibaba:arouter-compiler:$arouterCompilerVersion"kapt "android.arch.persistence.room:compiler:$roomVersion"

8)按照 IDE 的提示点击 Sync Now,等待稍许gradle down下所有依赖库

9)到android studio 插件中心下载并安装OkHttp Profiler,重启以生效,有关此插件的用法,请参阅《OkHttp Profiler plugin》,此插件在查看请求信息,导出 json转换成 entity 实体 kotlin 或者 java 语言代码 data class 代码非常方便。

至此所有依赖的项目和插件配置完毕,续篇主要讲基础代码的封装和项目组成结构。

续篇《献给android原生应用层开发初学者技术架构选型和整合的方案思路(三)》

献给android原生应用层开发初学者技术架构选型和整合的方案思路(二)相关推荐

  1. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块...

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  2. Android应用内社区SDK技术架构浅析

    Android应用内社区SDK技术架构浅析 图1为雪球财经自选界面,图2是雪球财经App内的社区,也就是动态页面. 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社 ...

  3. Android原生插件开发-开发篇

    原创文档:Android原生插件开发-开发篇 · 语雀 官方文档:原生开发者支持 创建module 点击File=>New=>New Module 选择Android Library,输入 ...

  4. java技术架构选型方案报告.pdf,技术架构选型方案报告

    <技术架构选型方案报告>由会员分享,可在线阅读,更多相关<技术架构选型方案报告(16页珍藏版)>请在人人文库网上搜索. 1.最高院执行项目 技术架构选型方案 Fantasy 2 ...

  5. 阅文集团副总裁傅徐军:最佳技术架构选型方法论

    近日,阅文集团副总裁傅徐军受邀参加了由中国信息通信研究院主办.中国通信标准化协会支持的"OSCAR云计算开源产业大会".在大会上,他基于阅文对自身业务技术架构深度优化的实践与成果, ...

  6. 千亿级数量下日志分析系统的技术架构选型

     
 随着数据已经逐步成为一个公司宝贵的财富,大数据团队在公司往往会承担更加重要的角色.大数据团队往往要承担数据平台维护.数据产品开发.从数据产品中挖掘业务价值等重要的职责.所以对于很多大数据工程师 ...

  7. 阅文集团副总裁傅徐军:最佳技术架构选型方法论 1

    近日,阅文集团副总裁傅徐军受邀参加了由中国信息通信研究院主办.中国通信标准化协会支持的"OSCAR云计算开源产业大会".在大会上,他基于阅文对自身业务技术架构深度优化的实践与成果, ...

  8. Android原生系统开发如何优雅的提供系统级的API供第三方程序调用?

    目录 故事背景 二.开发步骤 Step1.添加一个专属系统级服务 2.1.1.模仿Android原生服务接口,如WifiManager,规划自己的Manager 2.1.2.为我们的Manager生成 ...

  9. 热度3年猛增20倍,Serverless云开发的技术架构全解析

    『 作为一个不断发展的新兴技术, Serverless 热度的制高点已然到来.』 或许,Google Trends 所显示的 3 年猛增 20 倍的" Serverless " 搜 ...

最新文章

  1. MYSQL使用存储过程插入中文数据的疑似bug(UTF8)
  2. php rdp,小猿圈linux下使用FreeRDP 连接 Windows 远程桌面
  3. Ubuntu 压缩解压汇总(自己常用+持续更新)
  4. Java的引用类型(附图说明)
  5. springMVC 后端代码 如何用 @requestParam() 接收前台传过来的数组
  6. 6-9 统计个位数字 (15 分)
  7. Hibernate-注解-实体类
  8. 硬见小百科:尺寸公差、形位公差、表面粗糙度数值上的关系
  9. C#使用NPOI根据模板生成Word文件功能实现
  10. xh2.54母头转换为杜邦线母头
  11. hmailserver mysql密码_mysql+hmailserver+roundcube修改密码
  12. 科技狂人埃隆·马斯克
  13. java工程师认证_Java工程师认证工信部考试.doc
  14. 农历阳历转换 java_Java编程实例:Java版农历和阳历转换源码
  15. 淘宝客网站SEO及赚钱与揭密
  16. java qq 传送文件_java 传送文件
  17. php 保留小数0补位,PHP自带函数给数字前补0或补位
  18. MySQL 8.0 新特性之哈希连接(Hash Join)
  19. 高德打车宣布上线共享雨伞:或许是醉翁之意不在酒
  20. 分析PS中的3D功能

热门文章

  1. 求解两圆相交的交点坐标
  2. C语言的for循环转verilog,Verilog for 循环语句
  3. Feign客户端异常IOException: Incomplete output stream解决方案
  4. 离散数学图论期末复习
  5. 什么蓝标认证BLUESIGN?蓝标认证BLUESIGN怎么做?
  6. 一文学会LaTeX基础
  7. python快速_Python3快速入门
  8. ant design vue:upload打开选择文件弹框前弹出确认框
  9. DEL命令居然无法删除文件夹!
  10. Flashback Oracle文档阅读