読者です 読者をやめる 読者になる 読者になる

AndroidのDataBindingはGuavaを含んでいる (あとKotlinとかも)

ソフトウェア作る人向け

こんなエラーが吐かれた。

E/UncaughtException: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/repacked/google/common/collect/ImmutableList;

Android Studioの補完を信頼し切って、間違ったimportしていただけです。が、android.databindingということは期待していたGuavaのImmutableListと全く同じI/FがDataBindingに含まれるということ。

ちょっとだけ調査。
おそらく当該のpackageは以下のcommitから追加されてる。

Diff - 294f39d5404d2c0b0146cabfcd3e589039b164a9^! - platform/frameworks/data-binding - Git at Google

project.tasks.create(name: 'jarJarFile') {
    dependsOn 'proguard'
    dependsOn project.jar
    def inputLibrary = proguardJar
    def outputLibrary = jarJar
    inputs.file(inputLibrary)
    outputs.file(outputLibrary)
    doLast {
        def jarJarLibrary = new File(dataBindingConfig.externalPrebuiltsBase,
                'tools/common/m2/repository/com/googlecode/jarjar/jarjar/1.3/jarjar-1.3.jar').
                getCanonicalPath()
        // in Ant
        ant.taskdef(name: "jarjarIt",
                classname: 'com.tonicsystems.jarjar.JarJarTask',
                classpath: jarJarLibrary)
        // start jarjar task
        ant.jarjarIt(jarfile: outputLibrary) {
            // input is our inputLibrary
            zipfileset(src: inputLibrary)
            // rule to repackage antlr to new package
            rule pattern: 'org.antlr.**', result: 'com.google.repacked.antlr.@1'
            rule pattern: 'com.tunnelvisionlabs.**', result: 'com.google.repacked.tunnelvision.@1'
            rule pattern: 'org.abego.treelayout.**', result: 'com.google.repacked.treelayout.@1'
            // rule to repackage commons
            rule pattern: 'org.apache.**', result: 'com.google.repacked.apache.@1'
            rule pattern: 'kotlin.**', result: 'com.google.repacked.kotlin.@1'
        }
    }
}

ant.jarjarItというタスクがあって、これはjarのパッケージ名を変更したり、複数のjarをまるっとまとめられる。Fatjarみたいな感じ。

Google Code Archive - Long-term storage for Google Code Project Hosting.

ちなみにどういうところでGuavaを使っているのかというとコンパイラ部分。ただしべつにImmutableListなんかを使っているわけではなくって、Lists.newArrayListみたいにコード量を減らす目的みたい。

compiler/src/main/java/android/databinding/tool/expr/IdentifierExpr.java - platform/frameworks/data-binding - Git at Google


ちなみに関係ないんだけど、Javaコード生成部分にはKotlinが使われてた。面白い。

compiler/src/main/kotlin/android/databinding/tool/writer/DataBinderWriter.kt - platform/frameworks/data-binding - Git at Google

なるほど、たしかにJavaコードそのまんまで書くにはちょっとつらそう。


Kotlinスタートブック -新しいAndroidプログラミング

Kotlinスタートブック -新しいAndroidプログラミング

あとで読む: 高等学校学習指導要領解説 情報編 | 文部科学省


授業作る用に買いました。届いたら読みます

高等学校学習指導要領解説 情報編

高等学校学習指導要領解説 情報編

新宿東口の階段で転落事故を見た


全く知らないヒトだけど、同じく目撃者っぽい方👇


最下層女子校生: 無関心社会の罪 (小学館新書)

最下層女子校生: 無関心社会の罪 (小学館新書)

無題


AXE(アックス) オーバーグラス SG-604P 偏光レンズ GSM

AXE(アックス) オーバーグラス SG-604P 偏光レンズ GSM

こんどおしえてあげるよ


地雷を踏んだらサヨウナラ

地雷を踏んだらサヨウナラ

中古


買ったスポーツブラのアンダーが合わなかっただけです

放浪息子1<放浪息子> (ビームコミックス)

放浪息子1<放浪息子> (ビームコミックス)