Skip to content

アプリケーション内で をクリックすると、お使いのDataRobotバージョンに関する全プラットフォームドキュメントにアクセスできます。

Androidとの統合

Javaスコアリングコードは、ほとんどあるいは全く変更することなく、Androidで使用することができます。

備考

サポートされるAndroidバージョンは8.0(API 26)以降です。

単一モデルの使用

Androidプロジェクトでは、Javaプロジェクトの場合とほぼ同様に単一モデルを使用できます。

  1. スコアリングコードJARファイルをディレクトリのAndroidプロジェクトにコピーしますapp/libs
  2. 次の行をdependencyセクション(内)に追加しますapp/build.gradle
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    annotationProcessor fileTree(include: ['*.jar'], dir: 'libs')
    
  3. これで、Java APIと同じ方法でモデルを使用できるようになります。

さらに複雑なユースケース

スコアリングコードJARを処理して、複雑な機能を有効にする必要があります。DataRobotは、1つ以上のスコアリングコードJARファイルを処理して、以下の目的を達成できるツールscoring-code-jar-toolを提供します。 scoring-code-jar-toolJARファイルとして配布され、ここで入手できます。

複数のモデルの使用

同じAndroidプロジェクトで複数のスコアリングコードJARを使用することはできません。各スコアリングコードJARは同じ依存関係を含んでおり、Androidでは同じ完全修飾名を含む複数のクラスが許可されません。これを修正するために、scoring-code-jar-toolを使用して複数の入力JARファイルを取得し、それらをマージして重複クラスが削除された単一のJARファイルにすることができます。

例:

$ java -jar scoring-code-jar-tool.jar --output combined.jar model1.jar model2.jar

JARの動的ロード

スコアリングコードJARを動的にロードするには、それらをDalvik Executable(DEX)形式にコンパイルする必要があります。 scoring-code-jar-toolでは、--dexパラメーターを使用してDEXにコンパイルすることができます。

例:

$ java -jar scoring-code-jar-tool.jar --output combined.jar --dex /home/user/Android/Sdk/build-tools/29.0.3/dx model1.jar model2.jar

--dexパラメーターには、Android SDKの一部であるdxツールのパスが必要です。

Javaの例

この例では、ID5ebbeb5119916f739492a021のあるモデルがscoring-code-jar-toolによって引数で処理され、--dexという出力JARが生成されていますmodel-dex.jar。 この例では、マージされたJARファイルがアセットとしてプロジェクトに追加されています。アセットへのファイルシステムパスを取得することはできません。そのため、アセットはロードされる前にファイルシステム内の場所にコピーされます。

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String filename = "model-dex.jar";

        File externalFile = new File(getExternalFilesDir(null), filename);
        try {
            copyAssetToFile(filename, externalFile);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        DexClassLoader loader = new DexClassLoader(externalFile.getAbsolutePath(), "", null, MainActivity.class.getClassLoader());
        IClassificationPredictor classificationPredictor = Predictors.getPredictor("5ebbeb5119916f739492a021", loader);
    }

    private void copyAssetToFile(String assetName, File dest) throws IOException {
        AssetManager assetManager = getAssets();

        try (InputStream in = assetManager.open(assetName)) {
            try (OutputStream out = new FileOutputStream(dest)) {
                byte[] buffer = new byte[1024];
                int read;
                while ((read = in.read(buffer)) != -1) {
                    out.write(buffer, 0, read);
                }
            }
        }
    }
}

更新しました February 22, 2022
Back to top