查看以下常見問題列表,單擊具體的問題即可查看相應解答。
在華為 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 包。