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

本文详细介绍如何在Android Studio中创建项目,并配置Gradle依赖,包括支持库、网络请求库、数据库库等。

前篇《献给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 28
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    defaultConfig {
        applicationId "com.demo.mvvm"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.1.0"
        multiDexEnabled true
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
    buildToolsVersion "$buildToolsVersion"
    buildTypes {
        release {
            // 混淆
            minifyEnabled false
            // Zip align优化
            zipAlignEnabled true
            // 移除无用的resource文件
//            shrinkResources true

            proguardFiles 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 version
    implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
            , "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
            , "org.koin:koin-android-architecture:$koinVersion")

    // support and compatible,lifecycle version
    implementation("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 libs
    implementation "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 rxandroid
    implementation("io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
            , "io.reactivex.rxjava2:rxjava:$rxJavaVersion")

    // retrofit okhttp3 with network,adapter for rxjava
    implementation("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 components
    implementation("android.arch.navigation:navigation-fragment-ktx:$navVersion"
            , "android.arch.navigation:navigation-ui-ktx:$navVersion")

    // ORM
    implementation("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/RxLifecycle
    implementation "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 libs
    implementation("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 ARouter
    implementation("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/TDialog
    implementation "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原生应用层开发初学者技术架构选型和整合的方案思路(三)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值