androidでImmutableListを使うには

Collections.unmodifieableListで作ったListは、変更できないListです。setやadd、removeメソッドを呼ぶと、UnsupportedOperationExceptionがスローされます。ただし、コンパイル時にはわかりません。

org.eclipse.collectionsのImmutableListも変更できないリストです。ImmutableListには、setやadd、removeメソッド自体がないので、もしsetやadd、removeを呼んでいれば、コンパイル時にわかります。

もし、ImmutableListを使えるなら、setやadd、removeなどの変更メソッドをうっかり使っていてもコンパイル時にわかるので、unmodifieableListよりもいいかもしれません。

androidで、org.eclipse.collectionsを使うために、app/build.gradleのdependensiesに次の設定をしました。

// app/build.gradle

dependencies {
    〜省略〜
    implementation 'org.eclipse.collections:eclipse-collections-api:10.0.0'
    implementation 'org.eclipse.collections:eclipse-collections:10.0.0'
}Code language: JavaScript (javascript)

ビルドすると、次のエラーが。

Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'LICENSE-EDL-1.0.txt'

Caused by: com.android.builder.merge.DuplicateRelativeFileException: More than one file was found with OS independent path 'LICENSE-EPL-1.0.txt'

app/build.gradleにandroid.packagingOptionsを追加しました。

// app/build.gradle

android {
    〜省略〜

    packagingOptions {
        exclude 'LICENSE-EDL-1.0.txt'
        exclude 'LICENSE-EPL-1.0.txt'
    }
}Code language: JavaScript (javascript)

ビルドすると、次のエラーが。

Caused by: com.android.build.api.transform.TransformException: java.lang.ArrayIndexOutOfBoundsException: 65535

Caused by: java.lang.ArrayIndexOutOfBoundsException: 65535

multiDexEnabledや、implementation 'androidx.multidex:multidex:2.0.1'、MultiDexApplicationなどを試しましたが、効果がありませんでした。

すこしさまよいながら、app/build.gradleにandroid.compileOptionsを追加したところ、さきほどのエラーはなくなり、ビルドできました。

// app/build.gradle

android {
    〜省略〜

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}Code language: JavaScript (javascript)

まとめると、次のように編集しました。

android {
    〜省略〜

    packagingOptions {
        exclude 'LICENSE-EDL-1.0.txt'
        exclude 'LICENSE-EPL-1.0.txt'
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    〜省略〜
    implementation 'org.eclipse.collections:eclipse-collections-api:10.0.0'
    implementation 'org.eclipse.collections:eclipse-collections:10.0.0'
}Code language: JavaScript (javascript)
タイトルとURLをコピーしました