Android组件开辟

藏宝库编辑 2024-9-3 02:54:43 32 0 来自 中国
一、配景

一个app随着业务增长,代码放在同一个模块中会越来越痴肥,同时也导致多人开辟的一个难度。组件化可以把业务单独分出来,形成一个单独模块,可单独运行、测试等,相互之间不会影响。别的一个上风,假如一个公司有多个app,总会出现一些类似业务,如登录/注册。我们可以单独把公共业务封装成一个单独模块,供以是app使用,进步了开辟资本
二、项目结构

如下图1,项目分成了4层,第一层app壳,这个也就是我们主工程, 内里包罗application,启动页,以及一些初始化操纵。第二层为module层,也就是我们的详细业务模块,详细须要看业务。第三层公共资源库,全部module都依赖此lib库。第四层为工具层,我们可以封装一些常用的网络哀求,图片框架等

1.png
三、组件开辟代码设置




  • 先给各人看下工程重要目次结构  
  • 在project目次下创建一个全局的config.gradle设置文件。详细每个字段作用,看代码注释,这里就不作讲授了
ext{    //组件独立调试开关, 每次更改值后要同步工程    isDebug = false    //同一管理Android设置    android = [            // 编译 SDK 版本            compileSdkVersion: 32,            // 最低兼容 Android 版本            minSdkVersion: 22,            // 最高兼容 Android 版本            targetSdkVersion: 31,            // 当前版本编号            versionCode: 1,            // 当前版本信息            versionName: "1.0.0"    ]    //组件唯一包名    applicationid = [            "app":"com.example.demo",            "lgoin":"com.test.login",    ]    //哀求测试服/正式服    url = [            "debug": "http://v.juhe.cn",            "release":"http://v.juhe.cn"    ]    //同一管理module的第三方依赖    dependencies = [            corektx: 'androidx.core:core-ktx:1.7.0',            appcompat: 'androidx.appcompat:appcompat:1.3.0',            material: 'com.google.android.material:material:1.4.0',            constraintlayout: 'androidx.constraintlayout:constraintlayout:2.0.4',            junit: 'junit:junit:4.13.2',            junittest: 'androidx.test.ext:junit:1.1.3',            espressocore: 'androidx.test.espresso:espresso-core:3.4.0',    ]    //路由    libARouter= 'com.alibaba:arouter-api:1.5.2'    libARouterCompiler = 'com.alibaba:arouter-compiler:1.5.2'    //Gson解析    libGson = 'com.google.code.gson:gson:2.8.9'}

  • 引入config.gradle设置文件,在project全局中build.grale文件添加 apply from:"config.gradle"
plugins {    id 'com.android.application' version '7.2.1' apply false    id 'com.android.library' version '7.2.1' apply false    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false}//引入config全局设置文件apply from:"config.gradle"task clean(type: Delete) {    delete rootProject.buildDir}

  • 设置module,通过全局设置文件中的 isDebug 控制,来实现module和library之间的转换,我们对module中的build.grale文件作一下修改(这里修改的是module_login下面的)
apply from: '../config.gradle'if (isDebug){    apply plugin: 'com.android.application'}else {    apply plugin: 'com.android.library'}apply plugin:'org.jetbrains.kotlin.android'apply plugin: 'kotlin-kapt'android {    compileSdk rootProject.ext.android.compileSdkVersion    defaultConfig {        if (isDebug){            applicationId rootProject.ext.applicationid.lgoin        }        minSdk rootProject.ext.android.minSdkVersion        targetSdk  rootProject.ext.android.targetSdkVersion        versionCode  rootProject.ext.android.versionCode        versionName rootProject.ext. android.versionName        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"        //kotlin 路由设置        kapt {            arguments {                arg("AROUTER_MODULE_NAME", project.getName())            }        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }    compileOptions {        sourceCompatibility JavaVersion.VERSION_1_8        targetCompatibility JavaVersion.VERSION_1_8    }    sourceSets{        main{            if (isDebug){                manifest.srcFile 'src/main/debug/AndroidManifest.xml'            }else {                manifest.srcFile 'src/main/AndroidManifest.xml'            }        }    }    kotlinOptions {        jvmTarget = '1.8'    }}dependencies {    implementation rootProject.ext.dependencies.corektx    implementation rootProject.ext.dependencies.appcompat    implementation rootProject.ext.dependencies.material    implementation rootProject.ext.dependencies.constraintlayout    testImplementation rootProject.ext.dependencies.junit    androidTestImplementation rootProject.ext.dependencies.junittest    androidTestImplementation rootProject.ext.dependencies.espressocore    implementation project(path: ':lib_common')    //kotlin路由设置    implementation rootProject.ext.libARouter    kapt rootProject.ext.libARouterCompiler}

  • 添加AndroidManifest.xml文件,这里表明下为什么要添加AndroidManifest.xml。当module作为library库时,AndroidManifest.xml内里的内容是有区别的


  • 作为library,目次位置src/main/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.module.login">    <application>        <activity            android:name="com.module.login.TestActivity" />    </application></manifest>

  • 作为module单独运行,目次位置src/main/debug/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.module.login">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:roundIcon="@mipmap/ic_launcher_round"        android:supportsRtl="true"        android:name="com.module.login.App"        android:theme="@style/Theme.Demo">        <activity            android:name="com.module.login.TestActivity"            android:exported="true">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

  • 完成上面几步,module_login模块就设置完了,其他module依照设置就可以了。别的须要留意,组件开辟,一样平常会引入路由框架ARoute,实现模块之间的的跳转。详细怎么实现,请看ARoute使用
四、详细效果展示


  • 当config.gradle设置文件中的 isDebug=true 时


  • 当config.gradle设置文件中的 isDebug=false 时

五、总结

总的来说还算顺遂,期间就出现了些小问题,但还是值得留意

  • 包重名问题,创建项目时没留意,导致包重名了。Android修改包名
  • 路由ARoute设置,跳转提示找不到路径,重要时因为我其时想试试java和kotlin差异设置,详细请看Android路由ARoute使用
  • 组件开辟特殊须要留意资源重名,为了克制这个问题,可以在module中的build.gradle中添加resourcePrefix "xxx_" 前缀提示,如许每次添加资源,体系会提示加前缀
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 20:16, Processed in 0.185332 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表