android - 将 PreferenceScreen 与 applicationIdSuffix 一起使用

标签 android gradle android-manifest preferenceactivity

我在使 PreferenceScreenapplicationIdSuffix 协同工作时遇到了一些问题。

假设我的应用程序包/applicationId 在 Gradle 和 AndroidManifest.xml 中是 com.myapp,并且 applicationIdSuffix 定义为:

buildTypes {
    debug {
        applicationIdSuffix '.dev'
    }
}

如果我定义一个 PreferenceScreen 如下

<PreferenceScreen
    android:key="key_about" android:summary="something" android:title="About">
    <intent
        android:targetClass="com.myapp.activities.AboutActivity"
        android:targetPackage="com.myapp" />
</PreferenceScreen>

启动应用程序的调试版本时出现异常

java.lang.SecurityException: Permission Denial: starting Intent { (...) } from ProcessRecord{(...)} (pid=13658, uid=10105) not exported from uid 10067

这是有道理的,因为我正在尝试从不同的应用程序启动 Activity 。问题是我找不到让 Android 启动正确 Activity 的方法。

如果我将 targetClass 更改为“.activities.AboutActivity”,它仍然找不到 Activity

ActivityNotFoundException: Unable to find explicit activity class {com.myapp.dev/.activities.AboutActivity}

我什至尝试用正确的包为每个版本定义一个值:

android:targetClass="@string/classname"
android:targetPackage="@string/packagename"

但它找不到合适的 Activity :

ActivityNotFoundException: Unable to find explicit activity class
    {com.myapp.dev/com.myapp.dev.activities.AboutActivity};
have you declared this activity in your AndroidManifest.xml?

那么我怎样才能让它发挥作用呢?

最佳答案

您的困惑来自于 applicationIdSuffix 仅更改应用程序的包名称(其唯一 ID),但不会更改应用程序内部类的 java 包名称,包括您的 Activity .

这意味着您应该在您的偏好中声明:

android:targetClass="com.myapp.activities.AboutActivity"
android:targetPackage="@string/packagename"

其中 targetClass 始终相同,而 targetPackage 取决于您的构建类型,可以是 com.myappcom。 myapp.dev.

关于android - 将 PreferenceScreen 与 applicationIdSuffix 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31114385/

相关文章:

android - eclipse 中图像的无效文件名错误

java - Android:在不影响电池生命周期的情况下将数据保存在 RAM 中

gradle - Gradle Kotlin DSL 中的 kotlin ("...") 方法是什么?

android - 无法在Run Android App上合并dex

Android强制水平(横向)布局

java - 模拟器中的 OutOfMemoryException

gradle - Gradle 项目的自定义条件配置

android - 由于 "Permission Denial"服务无法运行,所需权限为空

android - Uses_​​permission 在 androidmanifest.xml 中被忽略

android - D/skia : --- Failed to create image decoder with message 'unimplemented'