在 Java 代码中通过调用 BuildConfig.isModuleMode 获取当前 Module 是 Library Module ( 集成模式 ) 还是 Application Module ( 组件模式 ) ;
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.i("MainActivity", "当前的模式状态 ${BuildConfig.isModuleMode}") } }
四、Library Module 中的代码示例
1、build.gradle 完整代码
// 根据 isModuleMode 动态切换 集成模式 / 组件模式 if (isModuleMode){ // 集成模式 apply plugin: 'com.android.library' }else{ // 组件模式 apply plugin: 'com.android.application' } apply plugin: 'kotlin-android' println("Print Variable : rootProject.ext.androidConfig : ${rootProject.ext.androidConfig}") // def 相当于 Java 中的 Object // 声明 config 和 appId 变量 , 并为其赋值 def androidConfig = rootProject.ext.androidConfig def appId = rootProject.ext.applicationId android { compileSdkVersion androidConfig.compileSdkVersion buildToolsVersion "30.0.3" defaultConfig { if (!isModuleMode){ // 组件模式 : 必须配置 applicationId applicationId appId["library1"] } minSdkVersion androidConfig.minSdkVersion targetSdkVersion androidConfig.targetSdkVersion versionCode androidConfig.versionCode versionName androidConfig.versionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 在 BuildConfig 中生成如下字段 // public static final boolean isModuleMode = false; buildConfigField("boolean", "isModuleMode", String.valueOf(isModuleMode)) // 资源配置 sourceSets{ main{ if (!isModuleMode){ // 组件化模式下使用 ComponentAndroidManifest.xml 作为清单文件 manifest.srcFile 'src/main/component/AndroidManifest.xml' // 配置额外的 Java 源文件目录 java.srcDirs 'src/main/component/java', 'src/main/java' }else{ // 集成模式 下使用默认设置 } } } } 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' } } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }
2、集成模式 下的 清单文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="kim.hsl.library1"> <application> <activity android:name=".MainActivity"/> </application> </manifest>
3、组件模式 下的 清单文件
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="kim.hsl.library1"> <application android:name=".Library1Application" 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.Component"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
4、组件模式 下的 Application 类
package kim.hsl.library1 import android.app.Application class Library1Application: Application() { override fun onCreate() { super.onCreate() } }
五、博客资源
博客源码 :
GitHub : https://github.com/han1202012/Component
CSDN 下载 : https://download.csdn.net/download/han1202012/18755837