当前位置: 首页 > news >正文

Android 动态加入Activity 时 manifest 注册报错解决。使用manifestPlaceholders 占位

需求如下:

项目 测试demo 有多个渠道,部分渠道包含支付功能,在主测试代码外,需要一个单独 Activity 调用测试代码。

MainActivityPayActivity
渠道A包含不包含
渠道B包含包含

因为支付功能需要引入对应的 moudule,因此希望是测试渠道A时,仅包含MainAcitivity 的代码。测试渠道B时,包含 MainAcitivity + PayActivity 的代码。

代码引入简单,添加 java 路径即可。

qudaob{// 加入支付相关代码sourceSets."$name".java.srcDirs += "src/main/code/pay/java"sourceSets."$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-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.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("功能未启用");}


http://www.mrgr.cn/news/91590.html

相关文章:

  • 【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4
  • 鼎捷PLM深度集成DeepSeek,领跑智能研发新赛道
  • 从猜想终结到算法革新,弹性哈希开启数据存储新篇章
  • 深度学习之自然语言处理CBOW预测及模型的保存
  • 【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析
  • dify实现分析-rag-关键词索引的实现
  • Git命令行入门
  • 有向图的强连通分量: Kosaraju算法和Tarjan算法详解
  • 解锁机器学习核心算法|主成分分析(PCA):降维的魔法棒
  • 如何写架构设计⽂档
  • Flutter - 初体验
  • Django 连接(sqlserver)数据库方法
  • C# 背景 透明 抗锯齿 (效果完美)
  • 基于Flask的第七次人口普查数据分析系统的设计与实现
  • 整理一些安装环境的常用命令
  • python的类与对象。为什么有些东西要用到类和对象。普通的编程方式不行吗?
  • 电容的温度系数分析
  • CSDN文章质量分查询系统【赠python爬虫、提分攻略】
  • javaSE学习笔记23-线程(thread)-总结
  • JavaScript中判断元素是否在可视区域内