当前位置: 移动技术网 > IT编程>移动开发>Android > 关于gradle替换Android Manifest中的属性变量的方法教程

关于gradle替换Android Manifest中的属性变量的方法教程

2018年10月25日  | 移动技术网IT编程  | 我要评论

flash导航,赵本山2014春晚,0xc000025

项目中我有多个activity想设置为启动的activity,也就是设置成mainactivity,需要在manifest中对activity配置:

<intent-filter>

    <action android:name="android.intent.action.main"/>

......

</intent-filter>

如果每次编译版本都去手动修改的话,不仅麻烦还容易忘记。

可以用gradle配置来解决这个问题。

defaultconfig {

   ......

   // 先在默认配置中定义两个变量main_activity_key和oem_main_activity_key,并赋初始值

   manifestplaceholders += [main_activity_key: "android.intent.action.main",

                            oem_main_activity_key: "android.intent.action.no_main"]

  //不能当独写两个manifestplaceholders,必须是一个数组,不然编译通不过

   ......

}

// 客户版本

productflavors {

oema {

buildconfigfield "int", "oem_type", "0"

}

oemb {

buildconfigfield "int", "oem_type", "0"

}

}

现在我的oema客户和oemb客户,各自都有自己的mainactivity.

<activity

android:name=".ui.activity.oemaactivity"

android:launchmode="singleinstance"

android:screenorientation="landscape"

android:theme="@android:style/theme.notitlebar.fullscreen">

<intent-filter>

<action android:name="android.intent.action.main"/>

<category android:name="android.intent.category.launcher"/>

</intent-filter>

</activity>

<activity

android:name=".ui.activity.oembactivity"

android:launchmode="singleinstance"

android:screenorientation="landscape"

android:theme="@android:style/theme.notitlebar.fullscreen">

<intent-filter>

<action android:name="android.intent.action.main"/>

<category android:name="android.intent.category.launcher"/>

</intent-filter>

</activity>

现在我想在编译oema的时候,把oemaactivity变成mainactivity,而oembactivity为非mainactivity.

// 遍历oem版本,在目标客户中根据需要替换main_activity_key和oem_main_activity_key的值

productflavors.all {

flavor ->

if (flavor.name.contains("oema")) {

flavor.manifestplaceholders = [main_activity_key: "android.intent.action.no_main",

   oem_main_activity_key: "android.intent.action.main"]

}

else if (flavor.name.contains("oemb")) {

flavor.manifestplaceholders = [main_activity_key: "android.intent.action.main",

   oem_main_activity_key: "android.intent.action.no_main"]

}

}

然后在manifest中修改两个activity的action属性

<activity

android:name=".ui.activity.oemaactivity"

android:excludefromrecents="true"

android:launchmode="singleinstance"

android:screenorientation="landscape"

android:theme="@android:style/theme.notitlebar.fullscreen">

<intent-filter>

<action android:name="${oem_main_activity_key}"/> // 修改属性

<category android:name="android.intent.category.launcher"/>

</intent-filter>

</activity>

<activity

android:name=".ui.activity.oembactivity"

android:excludefromrecents="true"

android:launchmode="singleinstance"

android:screenorientation="landscape"

android:theme="@android:style/theme.notitlebar.fullscreen">

<intent-filter>

<action android:name="${main_activity_key}"/> // 修改属性

<category android:name="android.intent.category.launcher"/>

</intent-filter>

</activity>

最后编译 gradlew assembleoemarelease

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网