首页 > 解决方案 > 将 sdk 版本从 28 升级到 29 时遇到错误

问题描述

将文件从内部存储或 SD 卡复制到应用程序数据目录时遇到权限被拒绝问题。从内部存储或 SD 卡上传时会发生同样的问题。

我尝试在 android target sdk 28 中构建相同的源代码,一切正常,但该功能在 android target sdk 29 中不起作用。我还尝试在设备中安装 target sdk 28 并使用 target sdk 29 重新安装而不卸载target sdk 28. 我的应用程序在这种情况下运行良好。

有没有人可以指导我,我该如何修改我的配置以防止权限被拒绝问题?

    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <preference name="ScrollEnabled" value="false" />
    <preference name="BackupWebStorage" value="none" />
    <preference name="SplashMaintainAspectRatio" value="true" />
    <preference name="FadeSplashScreenDuration" value="300" />
    <preference name="SplashShowOnlyFirstTime" value="false" />
    <preference name="SplashScreen" value="screen" />
    <preference name="SplashScreenDelay" value="3000" />
    <preference name="android-minSdkVersion" value="22" />
    <preference name="android-targetSdkVersion" value="29" />
    <preference name="AndroidPersistentFileLocation" value="Compatibility" />
    <platform name="android">
        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:networkSecurityConfig="@xml/network_security_config" />
        </edit-config>
        <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
        <allow-intent href="market:*" />
        <icon density="ldpi" src="resources/android/icon/drawable-ldpi-icon.png" />
        <icon density="mdpi" src="resources/android/icon/drawable-mdpi-icon.png" />
        <icon density="hdpi" src="resources/android/icon/drawable-hdpi-icon.png" />
        <icon density="xhdpi" src="resources/android/icon/drawable-xhdpi-icon.png" />
        <icon density="xxhdpi" src="resources/android/icon/drawable-xxhdpi-icon.png" />
        <icon density="xxxhdpi" src="resources/android/icon/drawable-xxxhdpi-icon.png" />
        <splash density="land-ldpi" src="resources/android/splash/drawable-land-ldpi-screen.png" />
        <splash density="land-mdpi" src="resources/android/splash/drawable-land-mdpi-screen.png" />
        <splash density="land-hdpi" src="resources/android/splash/drawable-land-hdpi-screen.png" />
        <splash density="land-xhdpi" src="resources/android/splash/drawable-land-xhdpi-screen.png" />
        <splash density="land-xxhdpi" src="resources/android/splash/drawable-land-xxhdpi-screen.png" />
        <splash density="land-xxxhdpi" src="resources/android/splash/drawable-land-xxxhdpi-screen.png" />
        <splash density="port-ldpi" src="resources/android/splash/drawable-port-ldpi-screen.png" />
        <splash density="port-mdpi" src="resources/android/splash/drawable-port-mdpi-screen.png" />
        <splash density="port-hdpi" src="resources/android/splash/drawable-port-hdpi-screen.png" />
        <splash density="port-xhdpi" src="resources/android/splash/drawable-port-xhdpi-screen.png" />
        <splash density="port-xxhdpi" src="resources/android/splash/drawable-port-xxhdpi-screen.png" />
        <splash density="port-xxxhdpi" src="resources/android/splash/drawable-port-xxxhdpi-screen.png" />
    </platform>

标签: androidcordovaionic4cordova-pluginsionic-native

解决方案


  1. 为 android X 安装 cordova 插件

https://www.npmjs.com/package/cordova-plugin-androidx离子cordova插件添加cordova-plugin-androidx npm i cordova-plugin-androidx

https://www.npmjs.com/package/cordova-plugin-androidx-adapter离子cordova插件添加cordova-plugin-androidx-adapter npm i cordova-plugin-androidx-adapter

  1. 为 sdk 编辑 config.xml
<preference name="android-buildToolsVersion" value="29.0.0" />
<preference name="android-minSdkVersion" value="22" />
<preference name="android-compileSdkVersion" value="29" />
<preference name="android-targetSdkVersion" value="29" />
<preference name="android-supportLibVersion" value="28.0.0" />
<preference name="android-googlePlayServicesAuthVersion" value="16.0.1" />
  1. 移除现有的android平台,添加添加android平台9.0.0 +

  2. 在 AndroidManifest.xml 中编辑应用标签,在下面添加属性

android:requestLegacyExternalStorage="true"


推荐阅读