Skip to content

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

Androidとの統合

ほとんどまたはまったく変更せずにAndroidでJavaスコアリングコードを使用することが可能です。

備考

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

単一モデルの使用

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

  1. スコアリングコードJARファイルをapp/libsディレクトリのAndroidプロジェクトにコピーします。
  2. 次の行をdependencyapp/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-toolはJARファイルとして配布され、こちらから取得できます。

複数のモデルの使用

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

例:

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

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引数で処理され、model-dex.jarという出力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);
                }
            }
        }
    }
} 

更新しました July 18, 2023