我正在尝试创建一个应用程序,它将成为默认的SMS应用程序,我已经遵循了几个guid告诉将此块添加到主要活动:
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
</intent-filter>
这工作得很好(只是改变的一部分),当我从android工作室调试应用程序时,一切顺利(意味着在我的手机上运行代码,但使用Android工作室)
但是,在生成发布应用程序(apk)并将其安装在设备上后,我在打开应用程序时收到此错误
2019-04-04 00:36:35.708 8404-8404/? E/GlobalPackageInstaller: launchApp error:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.toString()' on a null object reference
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1581)
at android.app.Activity.startActivityForResult(Activity.java:4526)
at android.app.Activity.startActivityForResult(Activity.java:4484)
at android.app.Activity.startActivity(Activity.java:4845)
at android.app.Activity.startActivity(Activity.java:4813)
at com.miui.global.packageinstaller.GlobalPackageInstallerActivity.launchApp(GlobalPackageInstallerActivity.java:306)
at com.miui.global.packageinstaller.GlobalPackageInstallerActivity.onClick(GlobalPackageInstallerActivity.java:280)
at android.view.View.performClick(View.java:6266)
at android.view.View$PerformClick.run(View.java:24730)
at android.os.Handler.handleCallback(Handler.java:793)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:173)
at android.app.ActivityThread.main(ActivityThread.java:6698)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)
如果我删除这4行:
<data android:scheme="sms" />
<data android:scheme="smsto" />
<data android:scheme="mms" />
<data android:scheme="mmsto" />
应用程序不会崩溃(但不会出现在可能的SMS默认应用程序列表中)
如果您缩小发布版本,可能会删除应用程序所需的某些内容。看看你的gradle文件。特别是在您的依赖:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-
layout:1.1.3'
implementation 'com.android.support:design:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation
'com.android.support.test.espresso:espresso-core:3.0.2'
通常会有一些行添加到proguard文件中,具体取决于您使用的库。
在将“意图过滤器”分成两个独立的部分后,问题就解决了
现在活动看起来像这样:
<activity
android:name=".activities.MainActivity"
android:exported="true"
android:enabled="true"
android:label="@string/app_title">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.SENDTO" />
<data android:scheme="sms" />
<data android:scheme="mms" />
<data android:scheme="smsto" />
<data android:scheme="mmsto"/>
</intent-filter>
</activity>
我不确定为什么它解决了它