接入 Android 常见问题

查看以下常见问题列表,单击具体的问题即可查看相应解答。

在华为 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。

  1. 新建 Java 类,继承 FileProvider。

    import android.support.v4.content.FileProvider;
    public class NebulaDemoFileProvider extends FileProvider {
    }
  2. 在 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>
  3. 在 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

  1. 新建 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;
     }
    }
  2. 注册 H5NebulaFileProvider。 在 mPaaS 初始化完成之后,启动离线包之前,对 H5NebulaFileProvider 进行注册,注册一次即可全局生效。

    H5Utils.setProvider(H5NebulaFileProvider.class.getName(), new H5NebulaFileProviderImpl());

如何在 Library 中使用/依赖 mPaaS

在使用 mPaaS 框架过程中,有时需要复用模块。复用时需要按照使用 Module 依赖的方式添加模块。本文以复用 mPaaS 扫码组件的 Module 为例进行说明。

前提条件

已按照原生 AAR 接入方式将工程接入 mPaaS。

操作步骤

  1. 在 Android 工程中创建 Android Library 类型的模块 scan

  2. 在新创建的 scan 模块的 build.gradle 文件中添加 api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")。示例如下:

     dependencies {
         ……
         //moudle 里使用 mPaaS 组件功能时,必须添加。
         api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
    
         ……
      }
  3. 通过 Android Studio mPaaS 插件为 scan 模块安装扫码组件。具体菜单路径为:mPaaS > 原生 AAR 接入 > 配置/更新组件 > 开始配置。安装后,扫码组件会自动加载。

  4. 配置 App 主工程。

     plugins {
         id 'com.android.application'
    
         ......    
         //必须在 app 下的 build.gradle 文件中添加 baseline.config(基线)。
         id 'com.alipay.apollo.baseline.config'
     }
  5. 调用组件模块。在使用扫码组件的地方,导入 scan 模块。

     dependencies {
         api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
    
         ....
         api project(':scan')//扫码组件
     }

如何解决运行时出现的 608 错误或 libsgmain 的 native 错误

在运行时如果发生异常,在 Android Studio 运行日志中搜索关键字 SecExcetpion,发现有 608 错误码或 libsgmain 的 native 错误,可以按照以下步骤进行排查。

  1. 检查是否存在 res/drawable/yw_1222.jpg 文件。

    • 检查 config 配置文件中是否有 Base64。

    • 检查 Gradle 插件 baseline.update 或者 baseline.config 是否有应用。2

  2. 检查 META-INF 是否有 CERT.SF、MANIFEST.MF、和 CERT.RSA 等三个文件.

  • app/build.gradle 打开 v1SignEnabled

  • 项目根目录下的 build.gradle 中是否有 apply plugin: 'com.alipay.apollo.optimize'3

执行以上检查步骤后,且确认结果检查无误,则说明在控制台上传的签过名的 APK 包有问题,如签名错误,需重新上传 APK 包。