【问题标题】:Android Manifest's android:exported="false" prevents app from running on deviceAndroid Manifest 的 android:exported="false" 阻止应用在设备上运行
【发布时间】:2018-03-25 00:36:44
【问题描述】:

早安,

在我的简单 Andorid 应用程序中,它实际上只是一个 webview 应用程序,我在 Android Manifest 中添加了“android:exported="false" 以避免“Exported service without permissions”警告/漏洞。但是当我在我的设备上运行它时它会给出“未安装应用程序”错误,除非我将其更改为“android:exported="true",否则该应用程序将在我的设备上正常启动。

然后我尝试按如下方式添加权限标签,以避免出现“Exported service without permissions”警告,但应用程序不会再次运行。让应用程序正确运行最好的方法是什么?我真的不需要导出任何服务。 互联网权限适用于我的应用程序中的一些注释链接,这些链接将在外部浏览器中打开。

很抱歉,由于我是 Android 开发新手,所以如果我遗漏了一些基本的东西,感谢您的指点。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"   
package=com.mymundane.app">
<uses-permission android:name="android.permission.INTERNET" />
<permission android:name=com.mymundane.app.mypermission" 
  android:label="mypermission" android:protectionLevel="signature">
</permission>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label=com.mymundane.app"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:fullBackupContent="@xml/backup_descriptor">
    <activity android:name=com.mymundane.app.MainActivity" 
        android:exported="true"  android:screenOrientation="portrait" 
         android:permission=com.mymundane.app.mypermission">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

【问题讨论】:

    标签: android permissions manifest


    【解决方案1】:

    “exported”属性描述了是否允许其他人使用它。

    因此,如果您在某个 Activity 上设置了“exported=false”,则其他应用,甚至 Android 系统本身都无法启动它。只有您可以在您自己的应用程序中执行此操作。

    因此,在标记为 LAUNCHER Activity 的 Activity 上设置“exported=false”基本上会告诉系统它永远无法启动您的应用程序。

    至于您提到的错误,我在您的清单中没有看到任何服务?该警告在哪里显示?

    【讨论】:

    • 感谢您的快速响应和澄清,这是我们客户的反馈,他们发现“未经许可导出服务”是我们应用程序中的一个漏洞,我会要求他们澄清。
    • 您在使用任何库吗?如果是这样,它们可能包含一项服务,该服务可以设置为“exported=true”。您可以检查是否使用 Android Studio 中的“Merged Manifest”选项卡。
    • 感谢您的提示,检查了一下,它看起来与主要清单没有太大不同,我没有使用任何库,我会问一下我们的客户正在使用哪种扫描仪进行报告漏洞。
    • 我有同样的问题 - 也是因为静态扫描中标记的漏洞而出现的。不过,根据原始问题,我想知道需要在此处设置哪些权限(如果有)。还是在启动器的情况下不被视为漏洞?提前感谢您的澄清。
    • Android Studio 给了我一个令人鼓舞的“启动成功”消息,甚至在我的主要活动中最初将其设置为 false 时在我的测试设备上放置了一个非功能启动图标。最近有帖子指出,对于具有意图的活动,将其设置为 false,因为现在必须在 Android 12 中明确设置,而没有提到需要将主要活动设置为 true。
    【解决方案2】:

    您上传的 APK 或 Android App Bundle 具有带有意图过滤器的活动、活动别名、服务或广播接收器,但未设置“android:exported”属性。此文件无法安装在 Android 12 或更高版本上。请参阅:developer.android.com/about/versions/12/behavior-changes-12#exported

    为了获得更好的体验,请阅读官方 android 文档。 https://developer.android.com/about/versions/12/behavior-changes-12#exported

    【讨论】:

      【解决方案3】:

      更新android studio并用gradle更新所有依赖

      【讨论】:

        猜你喜欢
        • 2017-07-01
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-10
        • 2018-03-08
        • 1970-01-01
        相关资源
        最近更新 更多