美文网首页
小结Gradle和Manifest中的几种变量设置

小结Gradle和Manifest中的几种变量设置

作者: 蓝灰_q | 来源:发表于2018-02-07 20:28 被阅读1849次

    gradle中使用buildConfigFiled

    可以定义一个基本类型常量

    在gradle中定义buildConfigField "boolean","AUTO_UPDATE","false"。
    该变量可以在gradle中使用,也可以在代码中使用:

    BuildConfig.AUTO_UPDATE;
    

    gradle中使用manifestPlaceHolder

    可以定义一个数组常量

    在gradle中定义

    manifestPlaceHolder[PARAM1,"value1", PARAM2,"value2"];
    

    在manifest中可以引用:

            <meta-data
                android:name="BIZ"
                android:value="${PARAM1}"/>
    

    PS: 在manifest中还可以用${}引用gradle中定义的各种变量,如applicationId、versionCode等。

    在代码中可以引用:

    getApplicationInfo().metaData.getString("PARAM1");//在当前组件的metadata中寻找
    getPackageManager().getServiceInfo(new ComponentName("com.yourbiz.yourpkg","yourservice"), PackageManager.GET_META_DATA).metaData.getString("PARAM1");//从当前组件中,访问其他组件的metadata中寻找
    

    manifest中使用metadata

    上一节可以看到,在manifest中,可以为Application/Activity等设置metadata

    <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
    
                // 可以在组件或Application标签下
                <meta-data android:name="nameActivity" android:value="somevalue"/>            
                // 可以访问gradle变量
                <meta-data android:name="nameActivity" android:value="${PARAM1}"/>
                // 可以gradle变量和常量拼接
                <meta-data android:name="nameActivity" android:value="pre${PARAM1}append"/>
    </activity>
    

    gradle中使用sourceSets

    gradle可以设置使用的代码目录

    android {
        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
                jniLibs.srcDirs = ['libs']
            }
    }
    

    可以修改使用哪个manifest文件:

    android {
        sourceSets {
            main {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }
    }
    

    可以修改使用哪些java源码:

    sourceSets {
        main {
            java {
                srcDir 'src/myJavaPath'
            }
        }
    }
    

    可以不使用某些文件:

        sourceSets {
            main {
                java {
                    exclude '/mock/**'  // 不想包含文件的路径
                }
            }
        }
    

    gradle中使用productFlavors

    gradle中可以配置多个productFlavors,以便一键切换场景。

        productFlavors {
            mock {
                applicationId "com.biz.app.mock"
                ...
            }
            prod {
                applicationId "com.biz.app"
                ...
            }
        }
    

    productFlavors可以和上述的buildConfigField、manifestPlaceHolder、sourceSets等结合使用,每个productFlavors定义一个属于自己的配置下,以便在代码中根据不同场景采用不同的常量值、常量数组、代码文件、资源文件、manifest文件、lib库等,非常灵活。

    引用

    Android Gradle manifestPlaceholders 占位符详解
    Android gradle SourceSets介绍与使用

    相关文章

      网友评论

          本文标题:小结Gradle和Manifest中的几种变量设置

          本文链接:https://www.haomeiwen.com/subject/tkiazxtx.html