Android

統合の準備

  1. SDKのダウンロードを実行し、解凍します。
  2. 以下のファイルを準備します。
    ファイルタイプ説明
    xmagic-xxx.aarSDK。入力必須
    ../assets/アルゴリズムモデル、素材リソースパック。入力必須
    ../jniLibssoライブラリ。入力必須

リソースのインポート

統合

  • 上記で準備したすべての.aarファイルをappプロジェクトのlibsディレクトリ下に追加します。
  • SDKパッケージのassets/ディレクトリにあるすべてのリソースを../src/main/assetsディレクトリにコピーします。SDKパッケージのMotionResフォルダにリソースがある場合は、このフォルダを../src/main/assetsディレクトリにコピーします。
  • jniLibsフォルダをプロジェクトの../src/main/jniLibsディレクトリ下にコピーします。

インポート方法

appモジュールのbuild.gradleを開き、依存参照を追加します。

android{
  ...
  defaultConfig {
      applicationIdを「権限承認licにバインドしたパッケージ名に変更」します
      ....
  }
  packagingOptions {
      pickFirst '**/libc++_shared.so'
  }
}
dependencies{
  ...
  compile fileTree(dir: 'libs', include: ['*.jar','*.aar'])//追加*.aar
}

注意

プロジェクトにGoogleのGsonライブラリを統合していない場合は、次の依存も追加する必要があります。

dependencies{
   implementation 'com.google.code.gson:gson:2.8.2'
}

全体フロー

手順1:認証

  1. 権限の承認を申請し、License URLとLicense KEYを取得します。

    注意:

    正常な状況では、Appのネットワーク接続が一度成功すれば認証フローは完了するため、Licenseファイルをプロジェクトのassetsディレクトリに保存する必要はありません。ただし、Appがネットワークに未接続の状態でSDKの関連機能を使用する必要がある場合は、Licenseファイルをダウンロードしてassetsディレクトリに保存し、最低保証プランとすることができます。この場合、Licenseファイル名は必ずv_cube.licenseとしなければなりません。

  2. 関連業務モジュールの初期化コードの中でURLとKEYを設定し、licenseのダウンロードをトリガーします。使用する直前になってダウンロードすることは避けてください。ApplicationのonCreateメソッドでダウンロードをトリガーすることもできますが、この時点でネットワークの権限がない可能性や、ネットワーク接続の失敗率が比較的高い可能性があるため、推奨しません。

    //ダウンロードのトリガーまたはlicenseの更新のみが目的であり、認証結果には関心がない場合は、4つ目のパラメータにはnullを渡します。
    TELicenseCheck.getInstance().setXMagicLicense(context, URL, KEY, null);
    
  3. その後、実際に美顔機能を使用する前に(例えばDemoのLaunchActivity.javaなど)認証を行います。

    // soライブラリがネットワークからダウンロードしたものの場合は、TELicenseCheck.getInstance().setTELicenseを呼び出す前にsoのパスを設定しておかなければ、認証に失敗する場合があります。
    // XmagicApi.setLibPathAndLoad(validLibsDirectory);
    // soがapkパッケージ内にある場合は、上記のメソッドを呼び出す必要はありません。
    TELicenseCheck.getInstance().setTELicense(context, URL, KEY, new TELicenseCheckListener() {
             @Override
            public void onLicenseCheckFinish(int errorCode, String msg) {
                //注意:このコールバックは呼び出しスレッド内にあるとは限りません
                if (errorCode == TELicenseCheck.ERROR_OK) {
                    //認証に成功しました
                }else{
                    //認証に失敗しました
                }
            }
        });
    

認証errorCodeの説明:

エラーコード説明
0成功です。Success
-1入力パラメータが無効です(例:URLまたはKEYが空など)
-3ダウンロードの段階で失敗しました。ネットワークの設定を確認してください
-4ローカルから読み取ったTE権限承認情報が空です。IOの失敗による可能性があります
-5読み取ったVCUBE TEMP Licenseファイルの内容が空です。IOの失敗による可能性があります
-6v_cube.licenseファイルのJSONフィールドが正しくありません。Tencent Cloudチームに連絡して処理を依頼してください
-7署名の検証に失敗しました。Tencent Cloudチームに連絡して処理を依頼してください
-8復号に失敗しました。Tencent Cloudチームに連絡して処理を依頼してください
-9TELicenseフィールド内のJSONフィールドが正しくありません。Tencent Cloudチームに連絡して処理を依頼してください
-10ネットワークから解析したTE権限承認情報が空です。Tencent Cloudチームに連絡して処理を依頼してください
-11TE権限承認情報をローカルファイルに書き込む際に失敗しました。IOの失敗による可能性があります
-12ダウンロードに失敗しました。ローカルassetの解析も失敗しました
-13認証に失敗しました。soがパッケージ内にあるか、またはsoパスが正しく設定されているかを確認してください
3004/3005権限承認が無効です。Tencent Cloudチームに連絡して処理を依頼してください
3015Bundle Id / Package Name が一致しません。Appで使用しているBundle Id / Package Nameが申請時のものと同じか、正しい権限承認ファイルを使用しているかを確認してください
3018権限承認ファイルが期限切れです。Tencent Cloudに更新を申請する必要があります
その他Tencent Cloudチームに連絡して処理を依頼してください

手順2:リソースのコピー

  1. リソースファイルがassetsディレクトリ内にある場合は、使用する前にappのプライベートディレクトリにコピーしておく必要があります。事前にコピーしておくか、または前の手順の認証成功のコールバックの中でコピー操作を行うこともできます。サンプルコードは、DemoのLaunchActivity.javaです。

    XmagicResParser.setResPath(new File(getFilesDir(), "xmagic").getAbsolutePath());
    //loading
    //リソースファイルのプライベートディレクトリへのコピーは1回のみ行います
    XmagicResParser.copyRes(getApplicationContext());
    
  2. リソースファイルがネットワークから動的ダウンロードしたものの場合は、ダウンロード成功後にリソースファイルパスを設定する必要があります。サンプルコードは、DemoのLaunchActivity.javaです。

    XmagicResParser.setResPath(ダウンロードしたリソースファイルのローカルパス);
    

手順3:SDKの初期化および使用方法

Tencent Effect SDK使用のライフサイクルはおおむね次のとおりです。

  1. 美顔UIデータを作成します。Demoプロジェクトのものを参照できます。 XmagicResParser.java,XmagicUIProperty.java,XmagicPanelDataManager.javaコード。

  2. プレビューレイアウトにGLSurfaceViewを追加します。

    <android.opengl.GLSurfaceView
    android:id="@+id/camera_gl_surface_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
    
  3. (オプション)カメラをクイック実装します。
    Demoプロジェクトのcom.tencent.demo.cameraディレクトリをプロジェクトにコピーします。PreviewMgrクラスを利用してカメラ機能をクイック実装します。実装の詳細についてはDemoプロジェクトのMainActivity.javaをご参照ください。

    //カメラ初期化
    mPreviewMgr = new PreviewMgr();
    //レイアウトしたGlSurfaceViewサンプルをカメラツールクラスに渡します
    mPreviewMgr.onCreate(mGlSurfaceView,false);
    //プレビューテクスチャデータのコールバック関数を登録します
    mPreviewMgr.setCustomTextureProcessor((textureId, textureWidth, textureHeight) -> {
    if (mXmagicApi == null) {
         return textureId;
    }
    //美顔sdkを呼び出してレンダリングします
    int outTexture = mXmagicApi.process(textureId, textureWidth, textureHeight);
    return outTexture;
    });
    //Activityの中のonResumeメソッドでカメラを有効にします
    mPreviewMgr.onResume(this, 1280, 720);
    
  4. 美顔SDKを初期化します。ActivityのonResume()メソッドに保存することをお勧めします。

    mXmagicApi = new XmagicApi(this, XmagicResParser.getResPath(),new XmagicApi.OnXmagicPropertyErrorListener()); 
    
  • パラメータ

    パラメータ意味
    Context contextコンテキスト
    String resDirリソースファイルディレクトリ。詳細については、手順2をご参照ください
    OnXmagicPropertyErrorListener errorListenerコールバック関数実装クラス
  • 戻り値
    エラーコードの意味についてはAPIドキュメントをご参照ください。

  1. 素材プロンプトのコールバック関数を追加します(メソッドのコールバックはサブスレッドで実行される場合があります)。一部の素材はユーザーに、うなずく、手を伸ばす、指ハートなどを促します。このコールバックは類似のプロンプトの表示に用いられます。

    mXmagicApi.setTipsListener(new XmagicTipsListener() {
    final XmagicToast mToast = new XmagicToast();
    @Override
    public void tipsNeedShow(String tips, String tipsIcon, int type, int duration) {
     mToast.show(MainActivity.this, tips, duration);
    }
     @Override
    public void tipsNeedHide(String tips, String tipsIcon, int type) {
     mToast.dismiss();
    }
    });
    
  2. 美顔SDKが各フレームのデータを処理し、対応する処理結果を返します。

    int outTexture = mXmagicApi.process(textureId, textureWidth, textureHeight);
    
  3. 指定するタイプの美顔エフェクトの数値を更新します。

    // 使用可能な入力パラメータのプロパティはXmagicResParser.parseRes()から取得できます
    mXmagicApi.updateProperty(XmagicProperty<?> p);
    
  4. 美顔SDKをPauseします。ActivityのonPause()ライフサイクルにバインドすることをお勧めします。

    //ActivityがonPauseの場合に呼び出します。OpenGLスレッドで呼び出す必要があります
    mXmagicApi.onPause();
    
  5. 美顔SDKをリリースします。ActivityのonDestroy() ライフサイクルにバインドすることをお勧めします。

    //このメソッドはGLスレッドで呼び出す必要があることにご注意ください
    mXmagicApi.onDestroy()