多个构建风格的 applicationId 清单占位符不起作用

2024-03-22

我正在修改当前的 android 项目,以便它可以安装在同一设备上以实现多种风格和构建配置。

构建.gradle:

{
    // ...
    defaultConfig {
        applicationId "com.myapp"
        manifestPlaceholders = [
            manifestApplicationId: "${applicationId}",
            onesignal_app_id: "xxxx",
            onesignal_google_project_number: "xxxx"
        ]
    // ...
    }

    productFlavors {
        production {
            applicationId "com.myapp"
            // ...
        }

        dev {
            applicationId "com.myapp.dev"
            // ...
        }

        // ...
    }

    buildTypes {
        release {
            // ...
        }

        debug {
            applicationIdSuffix ".debug"
            // ...
        }
    }

    // ...
}

AndroidManifest.xml:

<manifest ... >
    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
    <permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />      
    <!-- ... -->

    <receiver
        android:name="com.onesignal.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

    <!-- ... -->
</manifest>

当我编译相同风格的调试版本和发布版本时,我收到错误消息:

...

INSTALL_FAILED_DUPLICATE_PERMISSION

perm=com.myapp.permission.C2D_MESSAGE

pkg=com.myapp.dev

...

按照说明,manifestApplicationId 占位符来自 OneSignal 库上的 AndroidManifest.xmlhttps://documentation.onesignal.com/docs/android-sdk-setup https://documentation.onesignal.com/docs/android-sdk-setup

有人知道如何解决这个问题吗?谢谢。


OneSignal 需要manifestPlaceholders key manifestApplicationId设置为您的applicationId(又名您的包名称)。

这可以通过将其设置在您的buildTypes像下面这样。

buildTypes {
   debug {
      defaultConfig {
         manifestPlaceholders = [manifestApplicationId          : "${applicationId}",
                                 onesignal_app_id               : "11111111-1111-1111-1111-111111111111",
                                 onesignal_google_project_number: "111111111"]
       }
   }

   release {
      defaultConfig {
         manifestPlaceholders = [manifestApplicationId          : "${applicationId}",
                                 onesignal_app_id               : "22222222-2222-2222-2222-222222222222",
                                 onesignal_google_project_number: "222222222"]
      }
   }
}

Update 1:OneSignal-Android 3.3.0 不再需要manifestApplicationId.

Update 2:OneSignal-Android 4.0.0 不再需要任何manifestPlaceholders价值观。Instead OneSignal.setAppId(ONESIGNAL_APP_ID)需要在运行时调用 https://documentation.onesignal.com/docs/android-sdk-setup.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多个构建风格的 applicationId 清单占位符不起作用 的相关文章

  • Android Studio 使用的默认 Android SDK 路径是什么?

    使用Android Studio下载Android SDK时 默认下载路径是什么 我有兴趣了解 Linux Mac 和 Windows 的路径 在网上搜索了一下 好像是这样的 Linux Android Sdk Mac Library An
  • 将项目升级到最新版本的 Cordova 4.0.0 时,控制台中出现 TypeError“无法设置 # 的属性连接”

    今天 我将 Cordova CLI 从版本 3 5 升级到版本 4 0 此后 我将项目的平台支持更新到最新版本的 Android 因为它们现在是单独更新的 从那时起 每当我运行时 我都会出现此错误cordova run android 我收
  • ProGuard SimException

    经过大约 4 个小时的随机尝试 我正在尝试让 ProGuard 正常工作 尝试让这个令人惊叹的软件正常工作 我的项目使用 LibGDX 和 KryoNet 这是我当前的 ProGuard 配置 verbose dontobfuscate d
  • Android API版本兼容性

    我希望我的应用程序能够在 Android 版本 2 1 和 2 2 上运行 在我的应用程序的一个区域中 有一个肖像式相机 生成肖像相机预览的过程在两个操作系统版本上是不同的 据我所知 具体方法如下 2 1 Camera Parameters
  • 如何设置自定义谷歌地图标记的背景图像?

    我有一个用于 Google 标记的自定义图像 但我必须在其背景上设置另一个图像 是否可以设置地图标记的背景图像 是的你可以 试试这个所以问题如何使用 Android 地图 API v2 创建自定义形状的位图标记 https stackove
  • 如何在 Android 上以编程方式截取屏幕截图?

    如何不通过任何程序而是通过代码截取手机屏幕的选定区域的屏幕截图 以下代码允许将我的屏幕截图存储在 SD 卡上 并在以后满足您的任何需求 首先 您需要添加适当的权限来保存文件
  • 使用react-native测量音频的响度

    我正在创建一个应用程序 Android 来使用本机反应录制手机中的语音 一项要求是实时测量声音的响度并基于它制作动画 我尝试使用react native audio库 但问题是响度监控仅在IOS中支持 我检查了世博会音频库 但找不到方法 有
  • 脸书状态更新

    我在 Facebook 上更新状态时遇到问题 我正在使用 Facebook sdk 问题是我的状态正在发布但不显示文本 这是我的代码 gt 公共类 NetRockersUpdate 扩展 AsyncTask Override protect
  • AlertDialog setButton 已弃用

    我在我的 Eclipse Android 项目中使用此代码 alertDialog setButton OK new DialogInterface OnClickListener Override public void onClick
  • Gradle 控制台 - 获取更多日志输出

    我正在使用Android Studio 在 gradle 控制台中收到以下错误消息 编译错误 查看日志了解更多详情 尝试 使用 stacktrace 选项运行以获取堆栈跟踪 使用 info 或 debug 选项运行以获得更多日志输出 构建失
  • Android:当一个服务被杀死时,我们如何保存服务状态以供以后恢复?

    我们创建了一个应用程序 本质上是一个计时器 秒表 具有一些精心设计的功能 我们定义了一个服务 用于计时并提醒订阅某些计时器事件的侦听器 活动等 我们希望能够在 Android 终止我们的服务 用于内存回收 时保存计时器 秒表的状态 经过的秒
  • 使用 navhost 停止底部导航中的片段刷新

    这个问题已经被问过几次了 但现在已经是 2020 年了 有没有人找到一个好的可用的解决方案呢 我希望能够使用底部导航控件进行导航 而无需在每次选择片段时刷新片段 这是我目前拥有的 导航 main xml
  • Android SIP 客户端 SipManager.open() 未打开

    我一直在使用 Android SDK 的本机 SIP 库编写 SIP 客户端 由于某种原因 我无法让我的帐户在服务器上注册 以下是测试场地 Linux Mint 17 XFCE 运行 Kamailio 服务器 启用 MySQL 和 TLS
  • TextView位于屏幕中央[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Android 中的 TextView 中水平和垂直居中文本 https stackoverflow com questions 432037 how do i center text hor
  • 如何检查应用程序是否违反 Google 的假冒政策

    我的应用程序已从 Google Play 商店中删除 原因如下 经审核 我的应用 有 由于政策罢工而被暂停并从 Google Play 中删除 因为 它违反了假冒政策 有没有其他方法可以在发布之前检查应用程序是否遵守所有 Google 政策
  • 将 EditText 聚焦在设备上运行的 PopupWindow 中时出现异常

    我正在为 Android 开发一个弹出窗口 它正在工作 我在上面添加了一个 EditText 和一个按钮 当在 ADV 上运行时 它可以正常工作 而在设备上运行时 当我专注于 EditText 时 这会抛出一个奇怪的异常 android v
  • 已使用不兼容的格式定义属性(此处定义的原始属性)

    添加后无法构建项目 compile com android support design 24 2 0 一直报如下错误 看起来 问题在于支持矢量绘图 某处某些属性被添加两次 例如 构建的values xml文件包含
  • Firebird 和 Android JDBC 驱动程序

    火鸟有问题 我从未与 DB 合作过 服务器 firebird 1 5 上的数据库 添加库 firebird full 2 2 4到 libs 文件夹 将其添加到 Gradle implementation fileTree libs 将其添
  • 使用远程数据编写 Android、iPad、iPhone 客户端的技术

    我需要探索世界 你写了一个杀手级应用程序 但你有 Android iPhone iPad 客户端吗 我的问题是 1 向这些设备发送数据的最佳方式是什么 按照建议进行肥皂和休息here https stackoverflow com ques
  • 用户的 RecyclerView 为空

    我试图使用 Firebase 实时数据库在 RecyclerView 中向用户显示主键 但每次我尝试 RecyclerView 都是空的 我尝试了很多教程 但似乎没有任何帮助 这是我的数据库的样子 这是我使用 RecyclerView 的类

随机推荐

  • 桌面组合被禁用错误

    在我的 NET 4 0 上的 WPF 应用程序中 我让用户报告两个错误 这些错误似乎非常间歇性 我无法处理 下面 我发布了消息和堆栈跟踪的最上面一行 如果需要 我可以发布完整的堆栈跟踪 Message Desktop composition
  • Android:检查我的应用程序是否允许运行后台活动

    我有一个运行秒表服务的应用程序 并且我在前台运行该服务 我有一个显示计时器的通知 每秒更新一次 在我离开应用程序 30 秒后 通知停止更新 我发现原因是我的设备的电池优化 在我的应用程序的系统设置中 有一个电池优化部分 其中包含一个名为Al
  • WebSphere - 无法加载 Logmanager“org.apache.logging.log4j.jul.LogManager”

    我有一个运行 Web 应用程序的 WebSphere 应用程序服务器 我从 Eclipse 启动服务器 该应用程序中的主要日志记录框架是 log4j2 但也有一些使用 java util logging 的第三方库 我想将这些日志重定向到
  • 取消选中单选按钮[重复]

    这个问题在这里已经有答案了 该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表
  • Go:是否有可以在模板内使用的模数

    我的问题如标题所述 我正在尝试做类似的事情 range index element Products if index 4 0 div class row end div class columns small 3 product img
  • GitLab CI 启用 SCP

    我目前正在使用 GitLab com 上的共享运行器之一 是否可以设置 gitlab ci yaml 文件 以便构建可以将 SCP 文件从远程服务器传输到运行器上 我的目标是 SCP 文件 这些文件是我的构建所必需的依赖项 但它们不会在任何
  • C 数组中的指针递增

    我试图理解下面的程序 具体来说 定义cur name以及指针的递增cur age在 printf 语句中 cur age i 必须索引数组中的每个整数 但我希望它指向内存中的连续地址 而不是给定 int 的下一个整数是 4 个字节 即为什么
  • ASP.NET MVC:可用路由数据的 Uri

    我的问题很简单 我有一个 Uri 我想弄清楚它映射到哪个路由 这样我就可以对路由的各个部分进行一些检查 控制器 操作等 如何从 Uri 转到 RouteData 或 Route 根据 tvanfosson 的指导 我想出了一个可以满足我需要
  • 测试 Bash 函数返回值的正确方法是什么?

    我想测试 Bash 函数的返回值if像这样的声明 if func arg then 但我收到如下错误消息 conditional binary operator expected 这样做的正确方法是什么 是下面这个吗 if func arg
  • 字符串未被识别为有效的日期时间

    我收到此错误 字符串未被识别为有效的日期时间 代码如下 DateTimeOffSet dt new DateTimeOffset Convert ToDateTime DateTime Now ToString dd MM yyyy hh
  • 使用 Service Worker 和推送通知做出反应

    一些初步考虑 react 16 8 2 react scripts 2 1 5 我创建了一个新的反应应用程序 我需要实现推送通知 下列的this https developers google com web fundamentals co
  • Go 保证地址不变吗?

    给定一个对象obj有保证吗 uintptr unsafe Pointer obj 无论何时调用 都会计算出相同的值 当然 Go 保证如果你使用两个指向同一个对象的指针 它们总是比较相等 不过 实现可能会移动内存中的对象并透明地更新指向它的所
  • 什么是会话和会话变量?

    您能指导我什么是会话和会话变量吗 我不需要比较 ASP 会话和 ASP NET 会话 因为我对 ASP 一无所知 我也看过很多关于会话类型的文章 但我仍然无法正确理解 ASP NET 中什么是会话以及什么是会话变量 会话 是跟踪每个用户的请
  • PHP:Html 以 html 格式发送电子邮件

    我正在遵循教程http css tricks com sending nice html email with php http css tricks com sending nice html email with php 以 html
  • 获取 RFECV scikit-learn 中的功能

    受此启发 http scikit learn org stable auto examples feature selection plot rfe with cross validation html sphx glr auto exam
  • 如何在 Rails 3.1 中初始化 ActionDispatch::ParamsParser?

    我的应用程序为其 Rest 接口定义了一个自定义 Mime 类型 所以我将其注册在mime types rb初始化器 Mime Type register application vnd example app v1 xml xml v1
  • 当所有线程完成时

    这是我第一次真正尝试使用多线程 我想知道如何判断所有任务组何时完成运行 for int i 0 i lt taskGroups Count i ThreadStart t delegate RunThread taskGroups i ne
  • 自定义 jQuery-File-Upload(基本插件)

    我碰到jQuery 文件上传 https github com blueimp jQuery File Upload在谷歌搜索中 我发现它很简洁 正是我所需要的 但我遇到了一个小问题 即使用基本插件按照我希望的方式获取几个功能 我认为基本插
  • 如何将日期输入和时间输入视为当地时间,而不是世界时间?

    用户输入的日期输入2019 12 22给出这些值 input value 2019 12 22 input valueAsNumber 1576972800000 input valueAsDate Sat Dec 21 2019 16 0
  • 多个构建风格的 applicationId 清单占位符不起作用

    我正在修改当前的 android 项目 以便它可以安装在同一设备上以实现多种风格和构建配置 构建 gradle defaultConfig applicationId com myapp manifestPlaceholders manif