查看以下常见问题列表,单击具体的问题即可查看相应解答。
在华为 EMUI 10 系统中 input file 标签无法打开相机
由于华为10 系统 URI 的实现和标准 Android 存在部分差异,因此,在华为 10 上可能存在无法打开摄像机的问题。您需要执行以下操作以解决这个问题。
1. 升级基线
如果您采用的是 32 系列基线,则需要升级至 10.1.32.18 及以上。
如果您采用的是 60 系列基线,则需要升级至 10.1.60.9 及以上。
如果您采用的是 68 系列基线,则需要升级至 10.1.68-beta.3 及以上。
2. 配置 FileProvider
您可以复用您现有的 FileProvider,也可以新建一个 FileProvider。
新建 Java 类,继承 FileProvider。
import android.support.v4.content.FileProvider; public class NebulaDemoFileProvider extends FileProvider { }
在 res/xml 中新建 nebula_fileprovider_path.xml。
<?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> <external-path name="external" path="."/> </paths>
在 AndroidManifest 中加入配置。
<provider android:name="com.mpaas.demo.nebula.NebulaDemoFileProvider" android:authorities="com.mpaas.demo.nebula.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/nebula_fileprovider_path" /> </provider>
说明此处
android:authorities
的值com.mpaas.demo.nebula.provider
为 mPaaS 的代码示例信息,您需要根据自己的应用进行设置,并且不能设置为com.mpaas.demo.nebula.provider
,以免与其他 mPaaS 应用产生冲突。
3. 实现 H5NebulaFileProvider
新建 Java 类,实现
H5NebulaFileProvider
,实现getUriForFile
方法,在该方法中,调用上面实现的FileProvider
生成 URI。public class H5NebulaFileProviderImpl implements H5NebulaFileProvider { private static final String TAG = "H5FileProviderImpl"; @Override public Uri getUriForFile(File file) { try { return getUriForFileImpl(file); } catch (Exception e) { H5Log.e(TAG, e); } return null; } private static Uri getUriForFileImpl(File file) { Uri fileUri = null; if (Build.VERSION.SDK_INT >= 24) { fileUri = NebulaDemoFileProvider.getUriForFile(LauncherApplicationAgent.getInstance().getApplicationContext(), "com.mpaas.demo.nebula.provider", file); } else { fileUri = Uri.fromFile(file); } return fileUri; } }
注册
H5NebulaFileProvider
。 在 mPaaS 初始化完成之后,启动离线包之前,对H5NebulaFileProvider
进行注册,注册一次即可全局生效。H5Utils.setProvider(H5NebulaFileProvider.class.getName(), new H5NebulaFileProviderImpl());
如何在 Library 中使用/依赖 mPaaS
在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。本文以复用 mPaaS 扫码组件的 Module 为例进行说明。
前提条件
已按照原生 AAR 接入方式将工程接入 mPaaS。
操作步骤
在 Android 工程中创建 Android Library 类型的模块
scan
。在新创建的 scan 模块的 build.gradle 文件中添加
api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
。示例如下:dependencies { …… //moudle 里使用 mPaaS 组件功能时,必须添加。 api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") …… }
通过 Android Studio mPaaS 插件为 scan 模块安装扫码组件。具体菜单路径为:mPaaS > 原生 AAR 接入 > 配置/更新组件 > 开始配置。安装后,扫码组件会自动加载。
配置 App 主工程。
plugins { id 'com.android.application' ...... //必须在 app 下的 build.gradle 文件中添加 baseline.config(基线)。 id 'com.alipay.apollo.baseline.config' }
调用组件模块。在使用扫码组件的地方,导入 scan 模块。
dependencies { api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") .... api project(':scan')//扫码组件 }
如何解决运行时出现的 608 错误或 libsgmain 的 native 错误
在运行时如果发生异常,在 Android Studio 运行日志中搜索关键字 SecExcetpion
,发现有 608
错误码或 libsgmain 的 native 错误,可以按照以下步骤进行排查。
检查是否存在
res/drawable/yw_1222.jpg
文件。检查 config 配置文件中是否有 Base64。
检查 Gradle 插件
baseline.update
或者baseline.config
是否有应用。
检查 META-INF 是否有 CERT.SF、MANIFEST.MF、和 CERT.RSA 等三个文件.
在
app/build.gradle
打开v1SignEnabled
。项目根目录下的
build.gradle
中是否有apply plugin: 'com.alipay.apollo.optimize'
。
执行以上检查步骤后,且确认结果检查无误,则说明在控制台上传的签过名的 APK 包有问题,如签名错误,需重新上传 APK 包。