前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )

【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ③ ( 在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置 )

作者头像
韩曙亮
发布2023-03-30 17:32:17
2K0
发布2023-03-30 17:32:17
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

在上一篇博客 【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ① ( 组件化简介 | 创建组件化应用 | 依赖库模块 / 应用模块 切换设置 ) 最后提到了 在 Gradle 构建脚本中 , 需要实现 依赖库模块 / 应用模块 切换设置 , 主要涉及如下两个方面 :

  • build.gradle 构建脚本 切换设置 , 切换 应用 / 依赖库 ;
  • AndroidManifest.xml 清单文件 切换设置 , 设置 启动 Activity 项 ;

【Android Gradle 插件】组件化中的 Gradle 构建脚本实现 ② ( 组件化基本实现 | Project 相关目录 | 定义组件切换标志位 | 切换插件导入 | 切换设置应用 ID ) 博客中实现了 模块化 与 组件化 的切换 ;

本篇博客实现 使用 Gradle 脚本修改 AndroidManifest.xml 清单文件 ;

GitHub 地址 : https://github.com/han1202012/Componentization

一、AndroidManifest.xml 清单文件切换设置


在应用中 , 每个应用 只能有一个 启动 Activity , 如果有多个肯定会报错 ;

在组件化中 :

  • 模块化模式 : 正常的模式 , 依赖库不可独立运行 , 作为依赖库使用 , 此时 依赖库中不能存在启动 Activity , 否则最终应用会存在多个启动 Activity ;
  • 组件化模式 : 每个模块都可以独立运行, 因此相关的模块都是 Application 应用模块 , 依赖库可独立运行 , 此时 每个独立运行的模块必须有一个启动 Activity ;

1、可运行模块 AndroidManifest.xml 清单文件

如果模块是可独立运行的应用 , AndroidManifest.xml 清单文件如下所示 :

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.business">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Componentization">
        <activity android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

在 main 目录 下创建 debug 目录 , 将 AndroidManifest.xml 清单文件 放在该目录中 ;

将 module/src/main/debug/AndroidManifest.xml 清单文件 修改成上述配置 :

2、依赖库模块 AndroidManifest.xml 清单文件

如果模块作为依赖库使用 , AndroidManifest.xml 清单文件如下 :

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="kim.hsl.business">

    <application>
        <activity android:name=".MainActivity"
            android:exported="true"/>
    </application>

</manifest>

将 module/src/main/AndroidManifest.xml 清单文件 修改成上述配置 :

二、在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置


在 模块下 的 build.gradle 构建脚本 中的 " android#sourceSets#main " 层级下 , 配置 AndroidManifest.xml 清单文件 ,

  • 可运行状态 下 , 清单文件设置为 src/main/debug/AndroidManifest.xml ;
  • 依赖库状态 下 , 清单文件设置为 src/main/AndroidManifest.xml ;

关键代码如下 :

代码语言:javascript
复制
android {
    sourceSets {
        main {
            if (project.isModuleDebug) {
                //可运行模块
                manifest.srcFile "src/main/debug/AndroidManifest.xml"
            } else {
                //依赖库模块
                manifest.srcFile "src/main/AndroidManifest.xml"
            }
        }
    }
}

模块构建脚本完整代码 :

代码语言:javascript
复制
/*plugins {
    id 'com.android.application'
    id 'kotlin-android'
}*/

/**
 * rootProject.projectDir 是工程的根目录
 * apply from 引入构建脚本的操作, 等同于将该构建脚本原封不动拷贝到此处
 */
apply from: "${rootProject.rootDir}/common.gradle"

if (project.isModuleDebug) {
    /**
     * 组件化 : 在 Debug 开发阶段, 每个模块都可以独立运行, 因此相关的模块都是 Application 应用模块,
     *         此时, isModuleDebug 设置为 true. ( 单独运行 )
     * 组件化导入 com.android.application 插件
     */
    apply plugin: 'com.android.application'

} else {
    /**
     * 模块化 : 在 Release 发布阶段, 只有一个壳应用是可以独立运行的, 其它所有的模块都作为依赖库存在,
     *         此时, isModuleDebug 设置为 false. ( 非单独运行 )
     * 模块化导入 com.android.library 插件
     */
    apply plugin: 'com.android.library'
}

/**
 * 导入 Kotlin 插件
 */
apply plugin: 'kotlin-android'

android {
    compileSdkVersion 32
    buildToolsVersion "32.0.0"

    defaultConfig {
        if (project.isModuleDebug) {
            /**
             * 模块化时才能设置 applicationId
             * 依赖库设置 applicationId 编译时会报错
             */
            applicationId "kim.hsl.business"
        }
        minSdkVersion 18
        targetSdkVersion 32
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main {
            if (project.isModuleDebug) {
                //可运行模块
                manifest.srcFile "src/main/debug/AndroidManifest.xml"
            } else {
                //依赖库模块
                manifest.srcFile "src/main/AndroidManifest.xml"
            }
        }
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.8.0'
    implementation 'androidx.appcompat:appcompat:1.5.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、AndroidManifest.xml 清单文件切换设置
    • 1、可运行模块 AndroidManifest.xml 清单文件
      • 2、依赖库模块 AndroidManifest.xml 清单文件
      • 二、在 Gradle 构建脚本中实现 AndroidManifest.xml 清单文件切换设置
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档