Sal*_*lem 5 android gradle preferenceactivity android-manifest
我在制作PreferenceScreen和applicationIdSuffix合作方面遇到了一些问题.
假设我的应用程序包/ applicationId是com.myapp在摇篮和在AndroidManifest.xml,并且applicationIdSuffix被定义为:
buildTypes {
debug {
applicationIdSuffix '.dev'
}
}
Run Code Online (Sandbox Code Playgroud)
如果我定义PreferenceScreen如下
<PreferenceScreen
android:key="key_about" android:summary="something" android:title="About">
<intent
android:targetClass="com.myapp.activities.AboutActivity"
android:targetPackage="com.myapp" />
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
当启动应用程序的调试版本时,我得到一个例外
java.lang.SecurityException: Permission Denial: starting Intent { (...) } from ProcessRecord{(...)} (pid=13658, uid=10105) not exported from uid 10067
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我正在尝试从不同的应用程序启动一个活动.问题是我无法找到一种方法来启动Android正确的活动.
如果我更改targetClass为".activities.AboutActivity",它仍然无法找到该活动
ActivityNotFoundException: Unable to find explicit activity class {com.myapp.dev/.activities.AboutActivity}
Run Code Online (Sandbox Code Playgroud)
我甚至尝试使用正确的包为每个版本定义一个值:
android:targetClass="@string/classname"
android:targetPackage="@string/packagename"
Run Code Online (Sandbox Code Playgroud)
但它找不到合适的活动:
ActivityNotFoundException: Unable to find explicit activity class
{com.myapp.dev/com.myapp.dev.activities.AboutActivity};
have you declared this activity in your AndroidManifest.xml?
Run Code Online (Sandbox Code Playgroud)
那我怎么能做这个呢?
您的困惑来自于这样一个事实,即applicationIdSuffix只更改应用程序的包名称(其唯一ID),但不会更改应用程序内的类的java包名称,包括您的Activity.
这意味着您应该在您的偏好中声明:
android:targetClass="com.myapp.activities.AboutActivity"
android:targetPackage="@string/packagename"
Run Code Online (Sandbox Code Playgroud)
哪里targetClass始终相同,同时targetPackage取决于您的构建类型,可以是com.myapp或com.myapp.dev.
| 归档时间: |
|
| 查看次数: |
565 次 |
| 最近记录: |