网站原型,详情页设计说明,外贸网站搭建,企业做网站报价需求如下#xff1a;
项目 测试demo 有多个渠道#xff0c;部分渠道包含支付功能#xff0c;在主测试代码外#xff0c;需要一个单独 Activity 调用测试代码。
MainActivityPayActivity渠道A包含不包含渠道B包含包含
因为支付功能需要引入对应的 moudule#xff0c;因此…需求如下
项目 测试demo 有多个渠道部分渠道包含支付功能在主测试代码外需要一个单独 Activity 调用测试代码。
MainActivityPayActivity渠道A包含不包含渠道B包含包含
因为支付功能需要引入对应的 moudule因此希望是测试渠道A时仅包含MainAcitivity 的代码。测试渠道B时包含 MainAcitivity PayActivity 的代码。
代码引入简单添加 java 路径即可。
qudaob{// 加入支付相关代码sourceSets.$name.java.srcDirs src/main/code/pay/javasourceSets.$name.res.srcDirs src/main/code/pay/res
} 问题是 PayActivity 的注册。如果直接在 AndroidManifest.xml 中注册那么不包含 PayActivity 时会报错。如果不注册那么包含 PayActivity 时无法跳转。
前期考虑在 quandaob 文件夹下添加一个AndroidManifest.xml 让两个 Mainifest 合并但是一直合并不了只能另辟蹊径。 使用 manifestPlaceholders
你可以在 build.gradle 文件中为你的 Activity 添加 manifest placeholders然后在 AndroidManifest.xml 中引用它们。
修改 build.gradle
在 zebra block 中添加如下代码
android {...defaultConfig {...manifestPlaceholders [payActivity: com.xxx.test_playcontrol.PayActivity // 替换为你的 Activity 完整包名]}
}更新 AndroidManifest.xml
在 AndroidManifest.xml 中你可以使用占位符来声明 Activity
activity android:name${payActivity}intent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter
/activity这样在 Manifest中虽然会报红但是编译是没问题的。Manifest 中会一直包含PayActivity. 这样无论是否有 PayActivity 都可以正常使用了
动态引用 PayActivity try {Class? dynamicClass Class.forName(com.xxx.test_playcontrol.PayActivity);Intent intent new Intent(this, dynamicClass);startActivity(intent);} catch (ClassNotFoundException e) {e.printStackTrace();ToastTools.quickToast(mContext, pay Failed);DemoLog.e(功能未启用);}