Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么未使用的活动在上载到Play Store时会引发异常?_Java_Android_Android Intent_Android Activity - Fatal编程技术网

Java 为什么未使用的活动在上载到Play Store时会引发异常?

Java 为什么未使用的活动在上载到Play Store时会引发异常?,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,我最近上传了一个应用到Play Store,启用了Crashlytics。此应用程序中有一个名为StartQuizaActivity的活动,该活动是在开发过程中创建的,但当前未使用。该活动仍在清单中声明,但应用程序中没有调用它的意图 我收到一份带有堆栈跟踪的崩溃报告,该报告表明有设备试图启动此活动,这导致了IllegalArgumentException,表明所需的对象未按预期传递: 致命异常:java.lang.RuntimeException:无法启动活动 ComponentInfo{com

我最近上传了一个应用到Play Store,启用了Crashlytics。此应用程序中有一个名为StartQuizaActivity的活动,该活动是在开发过程中创建的,但当前未使用。该活动仍在清单中声明,但应用程序中没有调用它的意图

我收到一份带有堆栈跟踪的崩溃报告,该报告表明有设备试图启动此活动,这导致了IllegalArgumentException,表明所需的对象未按预期传递:

致命异常:java.lang.RuntimeException:无法启动活动 ComponentInfo{com.fractal扳手.acidtest/com.fractal扳手.acidtest.activities.StartQuizaActivity}: java.lang.IllegalArgumentException:未向提供额外的 开始指导活动

startquizaActivity.java

@Override protected void onCreate(Bundle savedInstanceState) {
        aminoAcid = getIntent().getExtras().getParcelable(AMINO_ACID);
        super.onCreate(savedInstanceState);

        if (aminoAcid != null) {
             // do things
        } else {
            throw new IllegalArgumentException("No extras supplied to startQuizActivity!");
        }
既然无法使用应用程序的UI启动StartQuizaActivity,为什么设备能够启动此活动?我注意到该设备是运行API 21的根Nexus,并且在应用程序中的其他活动中也看到类似的崩溃。即使在尝试MonkeyRunner之后,我也无法在任何设备上重现崩溃

这是谷歌或是拥有特定设备设置的用户进行的某种形式的自动测试吗?如有任何想法,将不胜感激

AndroidManifest.xml

<activity
    android:name=".activities.StartQuizActivity"
    android:label="@string/activity_title_prepare_for_quiz" />

当您使用android:exported=“true”将活动添加到清单时(这是活动的默认设置),它将成为任何应用程序都可以调用的公共API的一部分

可以理解,其他应用程序很少会无缘无故地从另一个应用程序显式启动随机活动,但像这样的应用程序确实允许最终用户这样做

你也可以

  • 从清单中删除活动-这显然会删除启动它的任何功能
  • 添加
    android:exported=“false”
    -这确保其他应用程序无法启动该活动
  • 如果没有提供额外服务,请致电,立即停止活动

  • 我知道像Tasker这样的应用程序可以直接启动任何应用程序清单中声明的任何活动。这是需要root的东西。同意,很可能是有人搞乱了应用程序。欢迎来到互联网。