# Androidとの統合

> Androidとの統合 - ほとんどまたはまったく変更せずにAndroidでJavaスコアリングコードを使用する方法について説明します。Android 8.0 (API
> 26)以降でのみサポートされます。

This Markdown file sits beside the HTML page at the same path (with a `.md` suffix). It summarizes the topic and lists links for tools and LLM context.

Companion generated at `2026-07-15T05:55:44.982023+00:00` (UTC).

## Primary page

- [Androidとの統合](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md): Full documentation for this topic (Markdown sidecar).

## Sections on this page

- [単一モデルの使用](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md#using-a-single-model): In-page section heading.
- [さらに複雑なユースケース](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md#more-complex-use-cases): In-page section heading.
- [複数のモデルの使用](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md#using-multiple-models): In-page section heading.
- [JARの動的ロード](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md#dynamic-loading-of-jars): In-page section heading.
- [Javaの例](https://docs.datarobot.com/ja/docs/classic-ui/predictions/port-pred/scoring-code/android.html.md#java-example): In-page section heading.

## Documentation content

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

> [!NOTE] 備考
> サポートされるAndroidバージョンは8.0（API 26）以降です。

## 単一モデルの使用

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

1. スコアリングコードJARファイルを app/libs ディレクトリのAndroidプロジェクトにコピーします。
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-tool` はJARファイルとして配布され、 [こちら](https://mvnrepository.com/artifact/com.datarobot/scoring-code-jar-tool) から取得できます。

### 複数のモデルの使用

同じ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の例

この例では、ID `5ebbeb5119916f739492a021` のあるモデルが `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);
                }
            }
        }
    }
} 
```
