Module作为App单独运行的步骤

Project中新建module是默认为lib的,现在要独立运行成App,就需要做一些更改。

要点

  1. gradle中配置

    1.1 顶部应用类型为app

    apply plugin: 'com.android.application
    

    1.2 设置包名,即applicationId

    defaultConfig {
        applicationId "com.xxx.xxx.net"
        ...
    }
    
  2. androidMenifest中配置

    2.1 配置application标签。包括icon、theme等

      <application
            android:name=".App"
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@drawable/ic_launcher"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">
        
          ...
        
        </application>
    

2.2 配置程序入口,添加intent-filter

        <activity android:name=".TestActivity">
              <intent-filter>
                  <action android:name="android.intent.action.MAIN" />
  
                  <category android:name="android.intent.category.LAUNCHER" />
              </intent-filter>
          </activity>

做到上面几点,就可以作为App运行了。

但是

我们既然组件化了,当然要做到可以随时切换是否独立运行。
这样,设置一个开关来控制,然后再来配置一下AndroidMenifest文件,就行了。

使用开关来配置Module是否独立运行

  1. 首先是设置是否组件化的开关,这个开关一般我们发在单独的gradle配置文件或gradle.properties文件中

    1. 在confi.gradle中是这样的。当然你得在project的build.gradle中添加对config的引用。

      project的build.gradle添加

      apply from: "config.gradle"
      

      然后在config.gradle中添加

      ext {
          /** Net模块是否作为App存在*/
          isNetApp = false
      }
      
    2. 在gradle.properties中设置,是这样的

      #控制运行哪个模块(1:运行app模块 2:运行net模块)
      runModule=2
      
    3. 然后就是引用刚刚设置的变量

      if (rootProject.ext.isNetApp) {
          apply plugin: 'com.android.application'
      } else {
          apply plugin: 'com.android.library'
      }
      

      或者

      if (Integer.valueOf(runModule) == 1) {
          apply plugin: 'com.android.application'
      } else {
          apply plugin: 'com.android.library'
      }
      

      应该都明白怎么用了。

  2. 开关设置好了,在要做切换的地方根据开关,来设置。主要在module的build.gradle中。

    if (rootProject.ext.isNetApp) {
        apply plugin: 'com.android.application'
    } else {
        apply plugin: 'com.android.library'
    }
    ...
    android {
        ...
        defaultConfig {
    
            if (rootProject.ext.isNetApp) {
                //组件模式下设置applicationId
                applicationId "com.xxx.xxx.net"
            }
            ...      
        }
        
        // 配置不同模式下的AndroidManifest文件地址
        sourceSets {
            main {
                if (rootProject.ext.isNetApp) {
                    manifest.srcFile 'src/main/AndroidManifest.xml'
                } else {
                    // 这里再在对应的文件夹下新建AndroidMenifest文件,并配置好activity等参数即可
                    manifest.srcFile 'src/main/module/AndroidManifest.xml'
                }
                jniLibs.srcDirs = ['libs']
            }
        }
    }
    

    AndroidMenifest的设置如下图


    Module作为App单独运行_1.png

OK,完成。这样我们就可以在config.gradle中切换模块是否单独运行。
实际效果如下


Module作为App单独运行_2.png

推荐阅读更多精彩内容