Android 项目模型配置管理

Android 项目配置管理

项目模型相关的配置管理

以下是一个完整的build.gradleconfig.gradle示例:

config.gradle文件:

groovy 复制代码
ext {
    // 模型相关配置,值都定义为 int 类型
    models = [
            modelTest: 100,
            modelDev: 200,
            modelProd: 300
    ]
    // currentModel 直接默认等于一个,这里设为 modelDev 的值
    currentModel = models.modelDev
}

build.gradle文件:

groovy 复制代码
// 应用配置文件
apply from: 'config.gradle'

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.2'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    // 配置 sourceSets 的资源目录及其他相关配置
    sourceSets {
        main {
            if (currentModel == models.modelTest) {
                // java 源文件目录配置,这里指定了在 modelTest 模式下 Java 代码的存放位置
                java {
                    srcDirs('src/main/test')
                }
                // res 目录配置,用于存放 Android 特定的资源文件,如布局、图片、字符串等资源,这里是 modelTest 模式下的资源目录
                res.srcDirs = ['src/main/res - test']
                // assets 目录配置,用于存放原始资源文件,这些文件会原封不动地打包进 APK
                // 在运行时,可以通过 AssetManager 来访问这些文件,常用于存放字体文件、音频文件、视频文件等资源
                assets.srcDirs = ['src/main/assets - test']
                // aidl 源文件目录配置,用于存放 Android Interface Definition Language 文件
                // AIDL 用于实现跨进程通信(IPC),这些文件会在构建过程中被编译成 Java 接口文件
                aidl.srcDirs = ['src/main/aidl - test']
                // jniLibs 目录配置,用于存放 native 库文件(如.so 文件)
                // 当项目需要使用 C/C++编写的库时,可以将对应的库文件放在 jniLibs 目录下的不同架构子目录(如 armeabi、armeabi - v7a、x86 等)中
                // 在运行时,Android 系统会根据设备的架构加载相应的库文件
                jniLibs.srcDirs = ['src/main/jniLibs - test']
                // renderscript 源文件目录配置,用于存放 RenderScript 文件
                // RenderScript 是一种用于在 Android 上进行高性能计算的技术,主要用于图像处理、计算密集型任务等
                // 在构建时会将其编译成机器码以提高执行效率
                renderscript.srcDirs = ['src/main/renderscript - test']
            } else if (currentModel == models.modelDev) {
                java {
                    srcDirs('src/main/dev')
                }
                res.srcDirs = ['src/main/res - dev']
                assets.srcDirs = ['src/main/assets - dev']
                aidl.srcDirs = ['src/main/aidl - dev']
                jniLibs.srcDirs = ['src/main/jniLibs - dev']
                renderscript.srcDirs = ['src/main/renderscript - dev']
            } else if (currentModel == models.modelProd) {
                java {
                    srcDirs('src/main/prod')
                }
                res.srcDirs = ['src/main/res - prod']
                assets.srcDirs = ['src/main/assets - prod']
                aidl.srcDirs = ['src/main/aidl - prod']
                jniLibs.srcDirs = ['src/main/jniLibs - prod']
                renderscript.srcDirs = ['src/main/renderscript - prod']
            }
        }
    }

    // 配置 buildTypes 的 buildConfigField 和其他常见构建类型配置
    buildTypes {
        debug {
            buildConfigField "int", "currentModel", currentModel.toString()
            minifyEnabled false
            debuggable true
            // 配置自定义的 buildConfigField,这里可以添加更多的自定义字段
            buildConfigField "String", "debugServerUrl", '"http://debug.example.com"'
        }
        release {
            buildConfigField "int", "currentModel", currentModel.toString()
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard - android - optimize.txt'), 'proguard - rules.pro'
            signingConfig signingConfigs.release
            // 可以添加更多 release 相关的配置,如优化选项等
            zipAlignEnabled true
            shrinkResources true
        }
    }

    // 配置 signingConfigs(签名配置)
    signingConfigs {
        release {
            storeFile file("release.keystore")
            storePassword "password"
            keyAlias "alias"
            keyPassword "password"
        }
    }

    // 配置 productFlavors(产品变体),这里只是示例,可以根据项目需求添加更多变体
    productFlavors {
        free {
            dimension "version"
            applicationIdSuffix ".free"
            versionNameSuffix " - free"
        }
        paid {
            dimension "version"
            applicationIdSuffix ".paid"
            versionNameSuffix " - paid"
        }
    }

    // 配置 lintOptions(代码检查选项)
    lintOptions {
        abortOnError false
        // 可以添加更多 lint 相关的配置,如忽略某些检查等
        ignore 'MissingTranslation'
    }
}

// 可以继续添加其他项目相关的配置,如依赖管理等
dependencies {
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso - core:3.4.0'
    // 添加其他依赖,比如网络库、数据库库等
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
    implementation 'androidx.room:room - runtime:2.3.0'
}

这个示例包含了以下内容:

  • build.gradle整体结构

    • buildscriptallprojects部分:配置了Gradle插件的依赖仓库和项目的依赖仓库。
    • android部分 :这是Android项目配置的核心部分,包括以下内容:
      • defaultConfig :定义了应用的基本属性,如applicationIdminSdkVersiontargetSdkVersionversionCodeversionName和测试相关的配置。
      • sourceSets :根据currentModel的值配置不同的源目录,包括javaresassetsaidljniLibsrenderscript等,用于在不同模式下管理项目的代码和资源。
      • buildTypes :配置了debugrelease两种构建类型,包括buildConfigField用于生成编译时常量,minifyEnabled用于控制是否进行代码混淆,debuggable用于指定是否可调试,以及release类型下的签名配置和其他优化选项(如zipAlignEnabledshrinkResources)。
      • signingConfigs :定义了release构建类型的签名信息,用于给APK签名。
      • productFlavors :示例了如何创建产品变体,这里创建了freepaid两种变体,并为它们设置了不同的applicationIdSuffixversionNameSuffix
      • lintOptions :配置了代码检查选项,如abortOnError设置为false表示在检查到错误时不停止构建,并忽略MissingTranslation类型的lint检查。
  • dependencies部分

    • 列出了项目的依赖,包括AndroidX库、测试库、网络库(OkHttp)和数据库库(Room)等。这些依赖根据项目的功能需求添加,可根据实际情况进行扩展或修改。

请注意:

  • 在实际应用中,需要根据项目的实际情况修改release.keystore相关的签名信息,保证其安全性。
  • 根据项目的功能需求,合理调整productFlavorsdependencies和其他配置选项。
  • 确保手动创建各种配置的目录(如src/main/testsrc/main/res - testsrc/main/assets - test等),以避免构建错误。

参考地址

豆包AI

相关推荐
阿巴斯甜17 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker17 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952718 小时前
Andorid Google 登录接入文档
android
黄林晴20 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android