修改AndroidManifest.xml后Pipe应用无法在主屏幕显示
问题根因
AndroidManifest.xml存在两处配置错误,直接导致应用无法在桌面生成启动入口:
<application>标签重复声明了两次android:name属性(分别对应.App和.Applications),属于XML语法错误,会干扰系统对Manifest文件的正常解析- 主Activity
MainActivity的启动专用intent-filter被错误添加了<data android:scheme="pipe" />约束。Android系统识别桌面启动入口的匹配规则要求intent-filter必须同时包含android.intent.action.MAIN动作和android.intent.category.LAUNCHER分类,且不能附加额外data约束——系统桌面发起的启动Intent不携带任何data数据,添加该规则后intent匹配直接失败,系统不会将该Activity识别为可启动的桌面入口,自然不会生成图标。
修复方案
- 清理
<application>标签的重复属性:两个android:name配置只保留你实际使用的Application子类,删除多余的重复声明行。 - 将
pipe协议的深链唤起规则从LAUNCHER专用的intent-filter中拆分出来,单独定义一个独立的intent-filter存放深链配置,禁止在MAIN/LAUNCHER的过滤器中添加任何data约束。深链对应的intent-filter建议补充android.intent.category.BROWSABLE分类,保证第三方应用、浏览器可以正常通过协议唤起应用。
修复后参考配置
<?xml version='1.0' encoding='utf-8'?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gell.browserx"> <uses-permission android:name="android.permission.INTERNET"/> <application android:name=".App" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:largeHeap="true" android:resizeableActivity="true"> <activity android:name=".ui.activity.MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" android:exported="true"> <!-- 桌面启动专用过滤器,不要添加任何data配置 --> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <!-- 深链规则单独放一个过滤器 --> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="pipe" /> </intent-filter> </activity> <activity android:name=".ui.activity.SettingActivity" android:label="Pipe Setting"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <data android:scheme="pipe-setting" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> <activity android:name=".common.crash.CrashHandler$CrashActiviy"/> <activity android:name=".DebugActivity" android:screenOrientation="portrait"/> <meta-data android:name="android.max_aspect" android:value="4.0"/> </application> </manifest>
注意:如果你的项目实际使用的Application类是
.Applications,把上面android:name属性的值替换成对应类名即可,两个配置二选一,不能同时存在。
修改完成后先卸载设备上已安装的旧版本应用,重新编译安装即可在桌面看到启动图标,pipe协议的深链唤起功能也不会受影响。
内容的提问来源于stack exchange,提问作者JsNewbie
相关产品推荐
相关产品推荐

