すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:よくある質問

最終更新日:Jan 17, 2025

次の FAQ リストを確認し、特定の質問をクリックして回答を表示します。

コンパイル時にネットワーク接続がない

ファイルをコンパイルしているときにネットワークがない場合、コンパイルが失敗する可能性があります。次の手順に従って、コンパイル環境のネットワークが接続されていることを確認します。

  1. インターネットに接続されていることを確認します。

  2. ブラウザのプロキシ設定やサードパーティのネットワークプロキシを含め、ネットワークプロキシが接続されていないことを確認します。

  3. IDE プロキシが構成されていないことを確認します。

    idea proxy

  4. gradle.properties ファイルで、Gradle プロキシが構成されていないことを確認します。つまり、systemProp.http.proxyHost 属性と systemProp.http.proxyPort 属性が構成されていません。構成されている場合は、関連する属性を削除できます。

    gradle proxy

プログラムのコンパイルに失敗しました

プログラムのコンパイルに失敗した場合は、次の手順に従ってトラブルシューティングと解決策を作成できます。

  1. 上記の手順に従って、コンパイル環境のネットワークが接続されていることを確認できます。

  2. Gradle 実行ログを確認して、追加された依存関係が有効かどうかを確認します。

  3. groupartifactversion を含む依存 GAV パラメーターが正しく構成されているかどうかを確認します。

    //デバッグ パックを参照 group:artifact:version:raw@jar
    bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:raw@jar"
    //リリース パックを参照 group:artifact:version@jar
    bundle "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT@jar"
    manifest "com.app.xxxxx.xxxx:test-build:1.0-SNAPSHOT:AndroidManifest@xml"
  4. システムに組み込まれているコマンドライン ツールで、次のコマンドを実行して Gradle 実行ログをエクスポートします。

    // コマンドを実行する前に、未定義の productflavor 属性を確認します。そうでない場合、コマンドは実行に失敗します。
    // 次のコマンドは、実行ログを log.txt ファイルにエクスポートします。
    gradle buildDebug --info --debug -Plog=true > log.txt
  5. 4 番目の手順からエクスポートされたログ ファイルを確認します。最新のログに次のレコードが表示されます。これは、追加された依存関係が存在しないことを意味します。

    Caused by: org.gradle.internal.resolve.ArtifactNotFoundException: Could not find nebulacore-build-AndroidManifest.xml (com.alipay.android.phone.wallet:nebulacore-build:1.6.0.171211174825).
    Searched in the following locations:
    http://mvn.cloud.alipay.com/nexus/content/repositories/releases/com/alipay/android/phone/wallet/nebulacore-build/1.6.0.171211174825/nebulacore-build-1.6.0.171211174825-AndroidManifest.xml
         at org.gradle.internal.resolve.result.DefaultBuildableArtifactResolveResult.notFound(DefaultBuildableArtifactResolveResult.java:38)
         at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$LocateInCacheRepositoryAccess.resolveArtifactFromCache(CachingModuleComponentRepository.java:260)
  6. このログの http リンクにアクセスしてログインし、Maven ライブラリを確認します。たとえば、http リンクは、前の手順にリストされているログの 3 行目にすることができます。

    説明

    build.gradle ファイルで、ログイン時に提供する必要があるアカウント名とパスワードを確認できます。

  7. 次のコマンドを実行して、gradle キャッシュをリフレッシュします。

    gradle clean --refresh-dependencies
  8. Maven ライブラリに関連する依存関係がある場合は、個人ディレクトリにある Gradle キャッシュを削除してから、再コンパイルします。

    Gradle キャッシュを削除する方法は次のとおりです。

    • macOS、Linux、UNIX などのシステムで、次のコマンドを実行します。

      cd ~
      cd .gradle
      cd caches
      rm -rf modules-2
    • Windows システムでは、デフォルトでパスは C:\Users\\{Username}\\.gradle\caches にあります。modules-2 フォルダを削除します。

コンパイル中のアクセス問題

コンパイル中にアクセス問題が発生した場合 (20 分以上待機した場合)、次の手順に従ってコンパイル効率を向上させることができます。

  1. 上記の手順に従って、コンパイル環境のネットワークが接続されていることを確認できます。

  2. ファイアウォールが閉じていることを確認します。

  3. IntelliJ IDEA エンコーダのネットワーク構成が非アクティブになっていることを確認します。

  4. コードで、Maven イメージを事前にロードします。Alibaba Cloud によってロードされた Maven イメージの次のコード例を参照してください。

apply plugin: 'maven'
buildscript {
    repositories {
        mavenLocal()

// まず Maven イメージをロードします
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}

        maven {
            credentials {
                username "既知のユーザーを使用"
                password "既知のパスワードを使用"
            }
            url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.3'
        classpath 'com.alipay.android:android-gradle-plugin:2.1.3.3.3'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}
allprojects {
    repositories {
        flatDir {
            dirs 'libs'
        }
        mavenLocal()
        maven {
            credentials {
                username "xxxxxxxxx"
                password "xxxxxxx"
            }
            url "http://mvn.cloud.alipay.com/nexus/content/repositories/releases/"
        }
        maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
    }
}

Apsara Stack にアクセスすると、構成をダウンロードして mPaaS にアクセスした後、コンパイルが拒否され、NullPointerException が発生します

Null pointer exception一般に、これは構成ファイル、つまり conf ファイルの問題です。フィールドを確認する必要があります。13 のフィールドのいずれかが欠落しているかどうかを確認します。パブリック クラウドからダウンロードしたファイルと比較し、フィールド名が正しいことを確認します。

アプリケーションをデバッグする方法

開発中は、コードをデバッグする必要があります。このトピックでは、2 つのデバッグ方法について説明します。

  • デバッグ モードでアプリケーションを起動する

  • アプリケーションを実行してから、デバッグを開始する

デバッグ モードでアプリケーションを起動する

  • ユースケース

    デバッグ アプリケーションの起動時に使用したい初期コード。たとえば、アプリケーションの初期化中にコードを初期化します。

  • 手順

  1. コマンド adb shell am start -W -S -D アプリケーション パック名/アプリケーションによって起動される最初のページのタイプ名 を実行します。たとえば、mPaaS デモのパック名は com.mpaas.demo で、アプリケーションによって起動される最初のページのタイプ名は com.alipay.mobile.quinox.LauncherActivity です。コマンドライン adb shell am start -W -S -D com.mpaas.demo/com.alipay.mobile.quinox.LauncherActivity を使用して、デバッグ モードでアプリケーションを起動できます。起動される最初のタイプ名については、次の図を参照してください。img

  2. コマンドが実行されると、携帯電話に次のダイアログ ボックスが表示されます。

  3. デバッグするコード行にブレークポイントを設定します。次に、ブレークポイントをアプリケーションが存在するプロセスにアタッチします。次の図を参照してください。

    修改2.jpg

アプリケーションを実行してから、デバッグを開始する

  • ユースケース

    イベントをトリガーした後にデバッグを開始します。たとえば、ボタンをクリックしたとき、またはページにリダイレクトしたときにのみデバッグする必要があります。

  • 手順

    アプリケーションを実行した後、アタッチされた Process ボタンをクリックします。または、上記のコマンドを実行した後、アタッチされたボタンをクリックしてから、デバッグを開始します。

mPaaS ポータルおよびバンドル プロジェクトで MultiDex を使用する場合の注意事項

ポータルとバンドルは、MultiDex に介入することは推奨されません。単一のポータル プロジェクトにいて、multiDexEnabled true を使用する必要がある場合を除きます。バンドルが大きすぎる場合は、バンドルを分割する方法でのみ続行できます。バンドルで multidex サポートをアクティブにしないでください

Gradle キャッシュをクリアする方法

Gradle プラグインの構成ページを開き、キャッシュのクリア ボタンをクリックして、Gradle プラグインのすべてのキャッシュ データを削除します。

image

最新の Gradle プラグインにスペックアップする

説明

このセクションの内容は、10.1.68 ベースラインにのみ適用されます。このバージョンのベースラインの詳細については、「ベースラインの概要」および「10.1.68 ベースラインの起動手順」をご参照ください。

Google が提供する Android Gradle Plugin のバージョンは、現在 3.5.x です。

mPaaS は、アダプターとして 3.5.x バージョンのプラグインも提供しており、Google Android Gradle Plugin 3.5.3 および Gradle 6.3 の API をサポートしています。

アクセス方法の変更

  1. Android Gradle Plugin の公式プラグインをインポートする代わりに、次の依存関係を追加することでプラグインをインポートするだけで済みます。依存関係の伝達により、プラグインは自動的にインポートされます。

    dependencies {
    classpath 'com.alipay.android:android-gradle-plugin:3.5.18'
    }
  2. Gradle Wrapper のバージョンを 5.6 以降のバージョンにスペックアップする必要があります。バージョン 6.3 を使用することをお勧めします。

使用方法の変更

  • apply plugin:'com.android.application を使用する必要はありません。

    • ポータル プロジェクトにいる場合は、apply plugin:'com.alipay.portal' を使用するだけで済みます。

    • バンドル プロジェクトにいる場合は、apply plugin:'com.android.application' を削除し、apply plugin:'com.alipay.bundle' を使用するだけで済みます。

    • ライブラリ プロジェクトにいる場合は、apply plugin:'com.alipay.library' を削除し、apply plugin:'com.android.library を使用するだけで済みます。

  • Android Studio 3.5 以降の最新の安定バージョンを使用している場合は、gradle.properties に android.buildOnlyTargetAbi=false を追加する必要があります。

  • 当社のワイヤレス セキュリティ コンポーネントは、現時点では V2 署名をサポートしていません。したがって、Android Studio デバッグを使用して APK をインストールする必要がある場合は、V2 署名を無効にする必要があります。コマンドラインを使用して作成し、minSdkVersion が 24 以上の場合も、V2 署名を無効にする必要があります。V2 署名を無効にする方法は次のとおりです。

    v2SigningEnabled false

重要

キャッシュをクリアした後、ミニ プログラムと HTML5 が機能するかどうかを確認する必要があります。

Huawei 10 システムの入力ファイル ラベルからカメラを起動できません

Huawei 10 システム URI の実装と標準の Android の実装にはいくつかの違いがあります。したがって、Huawei 10 でカメラを起動できないなどの問題が発生する可能性があります。この問題を解決するには、次の手順を実行する必要があります。

1. ベースラインをスペックアップする

  • 32 ベースラインを使用している場合は、ベースラインを 10.1.32.18 以降にスペックアップする必要があります。

  • 60 ベースラインを使用している場合は、ベースラインを 10.1.60.9 以降にスペックアップする必要があります。

  • 68 ベースラインを使用している場合は、ベースラインを 10.1.68-beta.3 以降にスペックアップする必要があります。

2. FileProvider を構成する

現在の FileProvider を再利用するか、新しい FileProvider を作成できます。

  1. FileProvider を継承する新しい Java クラスを作成します。

    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 を登録します。1 回登録すると、グローバルに有効になります。

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

ライブラリで mPaaS に依存して使用するにはどうすればよいですか?

mPaaS を使用している間、モジュールを再利用する必要がある場合があります。再利用は、モジュールを依存関係として追加することで実装されます。このセクションでは、スキャン モジュールを再利用する例を使用して、この方法を説明します。

前提条件

プロジェクトは、ネイティブ AAR モードで mPaaS にアクセスされています。

手順

  1. プロジェクトに Android ライブラリ タイプのスキャン モジュールを作成します。

  2. 新しく作成したスキャン モジュールの build.gradle ファイルに、次のコード api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline") を追加します。例は次のとおりです。

     dependencies {
         ……
         //モジュールで mPaaS を使用する場合、この行は必須です。
         api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
    
         ……
      }
  3. Android Studio mPaaS プラグインでスキャン モジュールにスキャン コンポーネントをインストールします。ディレクトリは次のとおりです。mPaaS > ネイティブ AAR モード > コンポーネントの構成/更新 > 構成の開始。インストール後、スキャン コンポーネントは自動的にロードされます。

  4. アプリ メイン プロジェクトを構成します。

     plugins {
         id 'com.android.application'
    
         ......
         // baseline.config (baseline) は、app モジュールの build.gradle ファイルに追加する必要があります。
         id 'com.alipay.apollo.baseline.config'
     }
  5. モジュールを呼び出します。

    使用されている場所にスキャン モジュールをインポートします。

     dependencies {
         api platform("com.mpaas.android:$mpaas_artifact:$mpaas_baseline")
    
         ....
         api project(':scan')//スキャン モジュール
     }

実行時に 608 エラーまたは libsgmain でのネイティブ エラーを修正する方法

  1. 実行時に例外が発生した場合、Android Studio 実行時ログでキーワード SecExcetpion を検索し、608 エラー コードまたは libsgmain のネイティブ エラーがあることがわかった場合は、以下の手順に従ってトラブルシューティングできます。

    1. APK を Android Studio に直接ドラッグ アンド ドロップし、Androidmenifest ファイルの targetSdkVersion が 26 ~ 28 のバージョンであるかどうかを確認します。1

    2. res/drawable/yw_1222.jpg ファイルが存在するかどうかを確認します。

      • 構成ファイルで Base64 を確認します。

      • Gradle プラグイン baseline.update または baseline.config が適用されているかどうかを確認します。2

    3. META-INF に 3 つのファイル、CERT.SF、MANIFEST.MF、および CERT.RSA があるかどうかを確認します。

      1. app/build.gradlev1SignEnabled を有効にします。

      2. プロジェクト ルート ディレクトリの build.gradlepply plugin: 'com.alipay.apollo.optimize' があるかどうか。3

    上記の確認手順を実行し、結果が正しいことを確認した後、コンソールにアップロードされた署名付き APK パッケージに問題があることを意味します。署名が正しくない場合は、APK パッケージを再アップロードする必要があります。