【问题标题】:AAPT: error: attribute android:requestLegacyExternalStorage not foundAAPT:错误:属性 android:requestLegacyExternalStorage 未找到
【发布时间】:2020-03-17 11:22:55
【问题描述】:

AndroidManifest.xml 中的收集错误

AAPT:错误:找不到属性 android:requestLegacyExternalStorage。

虽然属性有但是写错了

我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="android.apps">

<uses-feature android:name="android.hardware.wifi" android:required="false" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
    android:allowBackup="true"
    android:fullBackupContent="true"
    android:icon="@mipmap/launcher_icon"
    android:label="@string/app_name"
    android:requestLegacyExternalStorage="true"
    android:roundIcon="@mipmap/launcher_icon"
    android:supportsRtl="true"
    android:theme="@style/Theme.MaterialFiles"
    tools:ignore="GoogleAppIndexingWarning,UnusedAttribute">

    <activity
        android:name="android.apps.filelist.FileListActivity"
        android:label="@string/file_list_title"
        android:theme="@style/Theme.MaterialFiles.TransparentStatusBar"
        android:visibleToInstantApps="true"
        tools:ignore="UnusedAttribute">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="inode/directory" />
            <data android:mimeType="resource/folder" />
            <data android:mimeType="vnd.android.document/directory" />
        </intent-filter>
        <!-- @see android.apps.file.MimeTypes#isSupportedArchive(String) -->
        <!--
          ~ We don't really support content URI archives.
          ~ TODO: Figure out a good way to allow choosing this activity only in our app, or
          ~ support content URI archives.
        <intent-filter tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="application/gzip" />
            <data android:mimeType="application/java-archive" />
            <data android:mimeType="application/rar" />
            <data android:mimeType="application/zip" />
            <data android:mimeType="application/vnd.android.package-archive" />
            <data android:mimeType="application/vnd.debian.binary-package" />
            <data android:mimeType="application/x-7z-compressed" />
            <data android:mimeType="application/x-bzip2" />
            <data android:mimeType="application/x-compress" />
            <data android:mimeType="application/x-cpio" />
            <data android:mimeType="application/x-deb" />
            <data android:mimeType="application/x-debian-package" />
            <data android:mimeType="application/x-gtar" />
            <data android:mimeType="application/x-gtar-compressed" />
            <data android:mimeType="application/x-java-archive" />
            <data android:mimeType="application/x-lzma" />
            <data android:mimeType="application/x-tar" />
            <data android:mimeType="application/x-xz" />
        </intent-filter>
        -->
        <!-- @see https://android.googlesource.com/platform/packages/apps/DocumentsUI/+/master/AndroidManifest.xml -->
        <intent-filter>
            <action android:name="android.intent.action.OPEN_DOCUMENT" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.OPENABLE" />
            <data android:mimeType="*/*" />
        </intent-filter>
        <!--
          ~ Unusable until we implement DocumentsProvider.
        <intent-filter>
            <action android:name="android.intent.action.CREATE_DOCUMENT" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.OPENABLE" />
            <data android:mimeType="*/*" />
        </intent-filter>
        -->
        <intent-filter>
            <action android:name="android.intent.action.GET_CONTENT" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.OPENABLE" />
            <data android:mimeType="*/*" />
        </intent-filter>
        <!--
          ~ Unusable until we implement DocumentsProvider.
        <intent-filter>
            <action android:name="android.intent.action.OPEN_DOCUMENT_TREE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        -->
        <intent-filter>
            <action android:name="android.apps.intent.action.VIEW_DOWNLOADS" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.app.shortcuts"
            android:resource="@xml/shortcuts" />
    </activity>

    <activity
        android:name="android.apps.filelist.OpenFileAsDialogActivity"
        android:autoRemoveFromRecents="true"
        android:icon="@drawable/open_as_icon"
        android:label="@string/file_open_as_title"
        android:theme="@style/Theme.MaterialFiles.Translucent" />

    <activity
        android:name="android.apps.ftpserver.FtpServerActivity"
        android:label="@string/ftp_server_title"
        android:launchMode="singleTop"
        android:theme="@style/Theme.MaterialFiles">
        <intent-filter>
            <action android:name="android.apps.intent.action.MANAGE_FTP_SERVER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="android.apps.filelist.FileListActivity" />
    </activity>

    <activity
        android:name="apps.settings.SettingsActivity"
        android:label="@string/settings_title"
        android:launchMode="singleTop"
        android:theme="@style/Theme.MaterialFiles">
        <intent-filter>
            <action android:name="android.intent.action.APPLICATION_PREFERENCES" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="android.apps.filelist.FileListActivity" />
    </activity>

    <activity
        android:name="android.apps.settings.StandardDirectoriesActivity"
        android:label="@string/settings_standard_directories_title"
        android:launchMode="singleTop"
        android:theme="@style/Theme.MaterialFiles">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="android.apps.settings.SettingsActivity" />
    </activity>

    <activity
        android:name="android.apps.settings.BookmarkDirectoriesActivity"
        android:label="@string/settings_bookmark_directories_title"
        android:launchMode="singleTop"
        android:theme="@style/Theme.MaterialFiles">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="android.apps.settings.SettingsActivity" />
    </activity>

    <activity
        android:name="android.apps.about.AboutActivity"
        android:label="@string/about_title"
        android:launchMode="singleTop"
        android:theme="@style/Theme.MaterialFiles">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.filemanagere.android.apps.filelist.FileListActivity" />
    </activity>

    <activity
        android:name="android.apps.filejob.FileJobActionDialogActivity"
        android:autoRemoveFromRecents="true"
        android:theme="@style/Theme.MaterialFiles.Translucent" />

    <activity
        android:name="android.apps.filejob.FileJobConflictDialogActivity"
        android:autoRemoveFromRecents="true"
        android:theme="@style/Theme.MaterialFiles.Translucent" />

    <activity
        android:name="android.apps.viewer.text.TextEditorActivity"
        android:label="@string/text_editor_title"
        android:theme="@style/Theme.MaterialFiles">
        <intent-filter tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="application/ecmascript" />
            <data android:mimeType="application/javascript" />
            <data android:mimeType="application/json" />
            <data android:mimeType="application/typescript" />
            <data android:mimeType="application/x-sh" />
            <data android:mimeType="application/x-shellscript" />
            <data android:mimeType="application/xml" />
            <data android:mimeType="text/*" />
        </intent-filter>
    </activity>

    <activity
        android:name="android.apps.viewer.image.ImageViewerActivity"
        android:label="@string/image_viewer_title"
        android:theme="@style/Theme.MaterialFiles.Immersive">
        <intent-filter tools:ignore="AppLinkUrlError">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="image/*" />
        </intent-filter>
    </activity>

    <service android:name="android.apps.filejob.FileJobService" />

    <service android:name="android.apps.ftpserver.FtpServerService" />

    <provider
        android:name="android.apps.AppProvider"
        android:authorities="@string/app_provider_authority"
        android:exported="false" />

    <provider
        android:name="android.apps.file.FileProvider"
        android:authorities="@string/file_provider_authority"
        android:exported="false"
        android:grantUriPermissions="true" />

    <receiver android:name="android.apps.filejob.FileJobReceiver" />

    <receiver android:name="android.apps.ftpserver.FtpServerReceiver" />

    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />

    <!-- We need to reference a MD2 theme in XML for R8 to keep relevant resources. -->
    <activity
        android:name=".KeepMd2Resources"
        android:theme="@style/Theme.MaterialFiles.Md2" />
</application>

Знаете кого-нибудь, кто может ответить? ошибка сбора в AndroidManifest.xml

AAPT:ошибка:атрибут android:requestLegacyExternalStorage не найден。

对于离子开发人员,请参阅此答案以解决此问题: https://stackoverflow.com/a/65595715/10533962

【问题讨论】:

    标签: android ionic-framework android-10.0 ionic5


    【解决方案1】:

    这是为我解决问题的唯一方法

    android {
        compileSdkVersion 30
    

    【讨论】:

      【解决方案2】:

      (此处为材料文件作者)

      您需要针对 SDK 29 进行编译,并且可能使用 aapt 的最新构建工具来了解此属性,因为它是在 Android 10 中引入的。

      【讨论】:

      • 您能详细说明一下吗?我正在使用它,它仍然失败: buildToolsVersion = "29.0.0" minSdkVersion = 21 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesAuthVersion = "16.0.1"
      • 你还需要针对29编译。
      • 谢谢!使用这些值: buildToolsVersion = "29.0.0" minSdkVersion = 21 compileSdkVersion = 29 targetSdkVersion = 29 supportLibVersion = "28.0.0" googlePlayServicesAuthVersion = "16.0.1"
      【解决方案3】:

      对我来说,解决方法是:

      npm i cordova
      

      【讨论】:

        【解决方案4】:

        对于 ionic 开发者,请务必将 cordova 更新到最新版本:npm i cordova,然后添加 android 平台:ionic cordova platform add android@9.0.0

        还要确保将这些添加到config.mxl

        <preference name="android-minSdkVersion" value="22" />
        <preference name="android-compileSdkVersion" value="29" />
        <preference name="android-targetSdkVersion" value="29" />
        

        注意:

        SDK v22 意味着低于 5.1 的 android 版本将无法安装该应用,因为知道公司通常将最低 SDK 版本指定为 19 以支持所有设备。

        我们无法在 v22 之前的 SDK 上requestLegacyExternalStorage

        为了克服这个问题,我们必须在运行时在运行 android 10+ 的设备上添加此权限。

        使用此插件获取当前设备的 SDK 版本: https://ionicframework.com/docs/native/device

        如果 SDK 版本为 10 或以上,请使用此插件请求权限: https://ionicframework.com/docs/native/android-permissions

        【讨论】:

        • 为我工作。我正在使用离子-v1。谢谢!!!
        【解决方案5】:

        将此添加到 build.gradle

        subprojects {
            afterEvaluate {project ->
                if (project.hasProperty("android")) {
                    android {
                        compileSdkVersion 29
                        buildToolsVersion "29.0.2"
                    }
                }
            }
        }
        

        【讨论】:

        • 不只是 Ionic,这也适用于 React Native
        • 您使用哪个框架没有任何意义。您使用哪个平台是有道理的。这适用于Android平台。即使你使用的是 Ionic、Flutter 或 React Native
        • 感谢您的澄清,我将其作为android平台的一般答案
        【解决方案6】:

        对于构建 Nativescript 7 项目,我的解决方案是:

        1. 在 Android Studio 的 Android SDK Manager 中安装 28, 29 &amp; 30 API
        2. 像这样修改&lt;project&gt;/App_Resources/Android中的app.gradle文件: app.gradle file
        3. 运行命令:ns clean
        4. 运行命令:ns debug android

        【讨论】:

        • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
        【解决方案7】:

        在 android\app\build.gradle 中进行这些更改:

        compileSdkVersion 29
        
        targetSdkVersion 29
        

        它会起作用的。

        【讨论】:

          【解决方案8】:

          可能听起来很傻,但是您需要为您拥有的所有项目(例如您编译的依赖项)应用 compileSdkVersion 和 targetSdkVersion:

          android {
              compileSdkVersion 29
              defaultConfig {
                  minSdkVersion 21
                  targetSdkVersion 29
                  ...
          }

          【讨论】:

            【解决方案9】:

            如果您尝试删除android:requestLegacyExternalStorage="true",或更改android:minSdkVersion="xx"android:targetSdkVersion="xx" 的值,但AndroidManifest.xml 在恢复构建后...您应该尝试使用争论。就我而言(Angular 8),

            tns build android --compileSdk <AndroidVersion> --force
            

            【讨论】:

              【解决方案10】:

              只需删除行android:requestLegacyExternalStorage="true"。您可以在 Api 29 下使用。

              【讨论】:

              • 没有。如果清单中没有此行,您将无法从外部存储中获取文件 (API >= 29)
              猜你喜欢
              • 2020-07-06
              • 2022-07-19
              • 2020-12-21
              • 1970-01-01
              • 2021-04-09
              • 2020-11-22
              • 1970-01-01
              • 1970-01-01
              • 2020-08-25
              相关资源
              最近更新 更多