【发布时间】:2019-03-22 21:11:01
【问题描述】:
我在使 PreferenceScreen 和 applicationIdSuffix 一起工作时遇到了一些问题。
假设我的应用包/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
这是有道理的,因为我正试图从不同的应用程序启动一个活动。问题是我找不到让 Android 启动正确 Activity 的方法。
如果我将targetClass 更改为“.activities.AboutActivity”,它仍然找不到活动
ActivityNotFoundException: Unable to find explicit activity class {com.myapp.dev/.activities.AboutActivity}
我什至尝试使用正确的包为每个版本定义一个值:
android:targetClass="@string/classname"
android:targetPackage="@string/packagename"
但它找不到正确的活动:
ActivityNotFoundException: Unable to find explicit activity class
{com.myapp.dev/com.myapp.dev.activities.AboutActivity};
have you declared this activity in your AndroidManifest.xml?
那么我怎样才能做到这一点呢?
【问题讨论】:
-
根据这里的异常,我认为它说你应该在清单中定义你的 AboutActivity。
标签: android gradle android-manifest preferenceactivity