uni-app android 12 自定义基座同步文件时报错

uni-app android 12 自定义基座同步文件时报错

# 产品分类
uni小程序SDK

# 手机系统
Android

# 手机系统版本号
Android 12

# 手机厂商
三星

# 手机机型
s20

# 页面类型
vue

# SDK版本号
3.3.11

## 操作步骤
- hbuilder 3.4.3运行到手机

## 预期结果
- 成功同步文件

## 实际结果
- copyFile error Message=Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

## bug描述
自定义基座真机运行,
上传资源文件会报copyFile error Message=Attempt to invoke virtual method 'android.content.Context.getApplicationInfo()' on a null object reference
用官网sdk中的demo来当做基座也一样不能同步文件

![image](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20220401/eafd0f37dcbd733f1be5a2540ab989b6.png)
1 回复

在 uni-app 开发过程中,使用 Android 12 自定义基座同步文件时可能会遇到一些错误。以下是一些常见的问题及其解决方案:

1. 权限问题

Android 12 对文件访问权限进行了更严格的限制。确保你的应用已经获得了必要的文件读写权限。

解决方案:AndroidManifest.xml 文件中添加以下权限:

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

并且在运行时请求权限:

uni.authorize({
    scope: 'scope.writePhotosAlbum',
    success() {
        console.log('授权成功');
    },
    fail() {
        console.log('授权失败');
    }
});

2. Scoped Storage

Android 10 及以上版本引入了 Scoped Storage,限制了应用对文件系统的访问。

解决方案:AndroidManifest.xml 中添加以下配置以请求 MANAGE_EXTERNAL_STORAGE 权限:

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

并且在运行时请求权限:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
    if (!Environment.isExternalStorageManager()) {
        const intent = new android.content.Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
        intent.setData(android.net.Uri.parse("package:" + plus.android.runtimeMainActivity().getPackageName()));
        plus.android.runtimeMainActivity().startActivity(intent);
    }
}

3. 自定义基座配置问题

自定义基座可能没有正确配置,导致文件同步失败。

解决方案: 确保在 manifest.json 中正确配置了自定义基座:

{
    "app-plus": {
        "distribute": {
            "android": {
                "packagename": "com.example.app",
                "keystore": "your.keystore",
                "password": "yourpassword",
                "aliasname": "youralias",
                "aliaspassword": "youraliaspassword"
            }
        }
    }
}

4. 文件路径问题

文件路径可能不正确,导致同步失败。

解决方案: 确保文件路径正确,并且文件存在。可以使用 plus.io API 来检查文件路径:

plus.io.resolveLocalFileSystemURL(filePath, function(entry) {
    console.log('文件存在:', entry.toURL());
}, function(error) {
    console.log('文件不存在:', error);
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!