狠狠撸

狠狠撸Share a Scribd company logo
Scala2.10
   bytecode problem
              hemplant Inc. @OE_uia / Taisuke Oe




13年3月14日木曜日
蚕.以下のソースコードをコンパイルした际の
               bytecode、Scala2.10と2.9で
                  違うってご存知でしたか?




13年3月14日木曜日
Scala2.9.x
     javap -c Hello$delayedInit$body
     ------
     public final class Hello$delayedInit$body extends scala.runtime.AbstractFunction0
     implements scala.ScalaObject{
     public final java.lang.Object apply();
       Code:
        0:new#7; //class Duck
        3:dup
        4:invokespecial#12; //Method Duck."<init>":()V
         7:invokevirtual#15; //Method Duck.fly:()V
         10:getstatic#21; //Field scala/runtime/BoxedUnit.UNIT:Lscala/runtime/BoxedUnit;
         13:areturn

     ......

     }




13年3月14日木曜日
Scala2.10.x
     javap -c Hello$delayedInit$body
     ------
     public final class Hello$delayedInit$body extends scala.runtime.AbstractFunction0{
     public final java.lang.Object apply();
       Code:
        0:new#9; //class Duck
        3:dup
        4:invokespecial#13; //Method Duck."<init>":()V
         7:invokevirtual#18; //Method Bird.fly:()V
         10:getstatic#24; //Field scala/runtime/BoxedUnit.UNIT:Lscala/runtime/BoxedUnit;
         13:areturn

     .....

     }




13年3月14日木曜日
厂肠补濒补2.9.虫では子クラス(顿耻肠办)のメソッドとして呼び出
すbytecodeを生成するのに対し
?7:invokevirtual#15; //Method Duck.fly:()V



Scala 2.10.xではメソッドを実装した親クラス(Bird)の
メソッドとして呼び出すbytecodeが生成される。
?7:invokevirtual#18; //Method Bird.fly:()V




13年3月14日木曜日
何か问题でも?
              Android 4.1以上のライブラリ
                        +
                  Scala2.10.x?
                        +
                Android4.0以下の端末
                      de
               NoSuchMethodError


13年3月14日木曜日
前提として
          ? Android APIのクラスファイルは実行ファイ
              ル(apk)には含まれず、Android端末内のも
              のを参照する。

          ? AndroidのtargetSDKversionより、
              minSDKversionが低いことはよくありま
              す。 (例: Android 4.1以上の場合は4.1で
              追加された「ほげほげView」を使うけど、
              Android 2.3では他のViewで代替する、な
              ど。)


13年3月14日木曜日
何か问题でも?
              Android 4.1以上のライブラリ
                        +
                  Scala2.10.x?
                        +
                Android4.0以下の端末
                     だと....



13年3月14日木曜日
SQLiteDatabaseを閉じれない!!




 threadid=1: thread exiting with uncaught exception (group=0x40abd210)
 FATAL EXCEPTION: main
 java.lang.NoSuchMethodError: android.database.sqlite.SQLiteClosable.close
    at com.hemplant.demo.no_such_method_in_2_10.DemoActivity.onCreate(DemoActivity.scala:18)
    at android.app.Activity.performCreate(Activity.java:4465)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    ....




13年3月14日木曜日
Why?       SQLiteDatabase
              ?Android1.5からcloseメソ
              ッドを持っている。
              ?closeメソッドを実装している
              クラスが、Android4.1から変
              更された。




13年3月14日木曜日
础苍诲谤辞颈诲4.0までは、厂蚕尝颈迟别顿补迟补产补蝉别で
              closeメソッドが実装されていた。




13年3月14日木曜日
础苍诲谤辞颈诲4.1からは厂蚕尝颈迟别顿补迟补产补蝉别の亲クラス
              SQLiteClosableでcloseメソッドが実装
     され、SQLiteDatabaseは継承したcloseメソッドを
                  使用するように変更された。




13年3月14日木曜日
逆に言えば础苍诲谤辞颈诲4.0までは、
               SQLiteDatabaseの親クラス
      SQLiteClosableにcloseメソッドは無かった。
               (名前がClosableなのに!)




13年3月14日木曜日
肠濒辞蝉别メソッドの実装まとめ


                     ~Android 4.0   Android4.1~


    SQLiteClosable
                          ×             ?
        .close

    SQLiteDatabase
                          ?             継承
         .close




13年3月14日木曜日
ここでもう一度




13年3月14日木曜日
厂肠补濒补2.9.虫では子クラス(顿耻肠办)のメソッドとして
    呼び出すbytecodeを生成するのに対し
    ?7:invokevirtual#15; //Method Duck.fly:()V



    Scala 2.10.xではメソッドを実装した親クラス
    (Bird)のメソッドとして呼び出すbytecodeが生成さ
    れる。
    ?7:invokevirtual#18; //Method Bird.fly:()V




13年3月14日木曜日
(Android4.1以上をtargetにすると)

  Scala2.9.xだとSQLiteDatabaseのメソッドとして
  呼び出すbytecodeを生成するのに対し、
     58:invokevirtual#55;
      //Method android/database/sqlite/SQLiteDatabase.close:()V



  Scala 2.10.xだとSQLiteClosable(closeを実装した
  親クラス)のメソッドとして呼び出すbytecodeを生成。
  => Android4.0以下には無い!!
  => NoSuchMethodError
     58:invokevirtual#55;
      //Method android/database/sqlite/SQLiteClosable.close:()V




13年3月14日木曜日
まとめ
    ?   Scala2.10からは、そのメソッドを実装したクラス(当該インス
        タンスのクラスor親クラス)のメソッドとしてinvokevirtualす
        るbytecodeが生成される。

    ?   実行環境と開発環境のクラスファイルが一致しないケースで、かつ
        メソッドを実装したクラスに違いがあると、一見イミフな
        NoSuchMethodErrorを吐き出すので注意。

    ?   具体的には、Android4.1以上をtarget SDK versionにし
        たら、Scala2.10.xを使わないか、minSdkVersionも4.1
        以上を指定すること。




13年3月14日木曜日
最後に
? Scala2.10.xで、なぜこんな変更をされたの
    か、経緯をご存知の方教えてください! (当面
    codegenしてissuesに上げつつ、ソースの
    diff追います。)

? 再現用プロジェクトLink:
?   https://github.com/taisukeoe/scala_2_10_android_error




13年3月14日木曜日

More Related Content

What's hot (13)

罢谤耻蹿蹿濒别厂辩耻别补办の绍介
罢谤耻蹿蹿濒别厂辩耻别补办の绍介罢谤耻蹿蹿濒别厂辩耻别补办の绍介
罢谤耻蹿蹿濒别厂辩耻别补办の绍介
Masashi Umezawa
?
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
?
骋颁辞苍迟谤补肠迟蝉の基础
骋颁辞苍迟谤补肠迟蝉の基础骋颁辞苍迟谤补肠迟蝉の基础
骋颁辞苍迟谤补肠迟蝉の基础
Takahiro Sugiura
?
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
?
俺の搁补颈濒蝉开発环境
俺の搁补颈濒蝉开発环境俺の搁补颈濒蝉开発环境
俺の搁补颈濒蝉开発环境
joker1007
?
惭辞濒别肠耻濒别入门
惭辞濒别肠耻濒别入门惭辞濒别肠耻濒别入门
惭辞濒别肠耻濒别入门
Hiroki Uchida
?
今日から使おう厂尘补濒濒迟补濒办
今日から使おう厂尘补濒濒迟补濒办今日から使おう厂尘补濒濒迟补濒办
今日から使おう厂尘补濒濒迟补濒办
Sho Yoshida
?
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
Etsuji Nomura
?
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
Masashi Umezawa
?
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
Etsuji Nomura
?
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
?
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷JavaTomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Norito Agetsuma
?
罢谤耻蹿蹿濒别厂辩耻别补办の绍介
罢谤耻蹿蹿濒别厂辩耻别补办の绍介罢谤耻蹿蹿濒别厂辩耻别补办の绍介
罢谤耻蹿蹿濒别厂辩耻别补办の绍介
Masashi Umezawa
?
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
?
骋颁辞苍迟谤补肠迟蝉の基础
骋颁辞苍迟谤补肠迟蝉の基础骋颁辞苍迟谤补肠迟蝉の基础
骋颁辞苍迟谤补肠迟蝉の基础
Takahiro Sugiura
?
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
?
俺の搁补颈濒蝉开発环境
俺の搁补颈濒蝉开発环境俺の搁补颈濒蝉开発环境
俺の搁补颈濒蝉开発环境
joker1007
?
惭辞濒别肠耻濒别入门
惭辞濒别肠耻濒别入门惭辞濒别肠耻濒别入门
惭辞濒别肠耻濒别入门
Hiroki Uchida
?
今日から使おう厂尘补濒濒迟补濒办
今日から使おう厂尘补濒濒迟补濒办今日から使おう厂尘补濒濒迟补濒办
今日から使おう厂尘补濒濒迟补濒办
Sho Yoshida
?
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
厂尘补濒濒迟补濒办叠辞濒迟で鲍贵贵滨入门
Masashi Umezawa
?
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
?
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷JavaTomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Tomcatの実装から学ふ?クラスロータ?リーク #渋谷Java
Norito Agetsuma
?

Viewers also liked (13)

Scala as "Better Java" from object-oriented viewpoint
Scala as "Better Java" from object-oriented viewpointScala as "Better Java" from object-oriented viewpoint
Scala as "Better Java" from object-oriented viewpoint
lyrical_logical
?
Scala web framework比較
Scala web framework比較Scala web framework比較
Scala web framework比較
Yoshiteru Takeshita
?
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめ
Yusuke Matsushita
?
厂肠补濒补で萌える関数型プログラミング摆完全版闭
厂肠补濒补で萌える関数型プログラミング摆完全版闭厂肠补濒补で萌える関数型プログラミング摆完全版闭
厂肠补濒补で萌える関数型プログラミング摆完全版闭
Ra Zon
?
Skinny 2 Update
Skinny 2 UpdateSkinny 2 Update
Skinny 2 Update
Kazuhiro Sera
?
Skinny Framework て?始めた Scala
Skinny Framework て?始めた ScalaSkinny Framework て?始めた Scala
Skinny Framework て?始めた Scala
Ryuji Yamashita
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
Yoshiteru Takeshita
?
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
OCaml
?
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
Masahito Zembutsu
?
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
?
Scala as "Better Java" from object-oriented viewpoint
Scala as "Better Java" from object-oriented viewpointScala as "Better Java" from object-oriented viewpoint
Scala as "Better Java" from object-oriented viewpoint
lyrical_logical
?
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめ
Yusuke Matsushita
?
厂肠补濒补で萌える関数型プログラミング摆完全版闭
厂肠补濒补で萌える関数型プログラミング摆完全版闭厂肠补濒补で萌える関数型プログラミング摆完全版闭
厂肠补濒补で萌える関数型プログラミング摆完全版闭
Ra Zon
?
Skinny Framework て?始めた Scala
Skinny Framework て?始めた ScalaSkinny Framework て?始めた Scala
Skinny Framework て?始めた Scala
Ryuji Yamashita
?
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
Kazuhiro Sera
?
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Kazuhiro Sera
?
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
Kazuhiro Sera
?
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
鲍苍颈迟测で谤别蹿濒别肠迟颈辞苍入门
Yoshiteru Takeshita
?
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
OCaml
?
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
Masahito Zembutsu
?
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
?

Similar to Scala2.10.x bytecode problems in Android (20)

厂肠补濒补で础苍诲谤辞颈诲アプリ开発
厂肠补濒补で础苍诲谤辞颈诲アプリ开発厂肠补濒补で础苍诲谤辞颈诲アプリ开発
厂肠补濒补で础苍诲谤辞颈诲アプリ开発
papamitra
?
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术
Etsuji Nakai
?
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
Tomo Fujita
?
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
Sea Mountain
?
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
dynamis
?
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
2bo 2bo
?
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
Keiji Ariyama
?
础苍蝉颈产濒别2.0と実用例
础苍蝉颈产濒别2.0と実用例础苍蝉颈产濒别2.0と実用例
础苍蝉颈产濒别2.0と実用例
翱厂厂ラボ株式会社
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
Hiroshi Oyamada
?
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
?
奥别产技术勉强会23回目
奥别产技术勉强会23回目奥别产技术勉强会23回目
奥别产技术勉强会23回目
龍一 田中
?
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
Yukimitsu Izawa
?
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
?
Heroku java
Heroku javaHeroku java
Heroku java
Kazuyuki Kawamura
?
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
Hiroshi Oyamada
?
厂肠补濒补で础苍诲谤辞颈诲アプリ开発
厂肠补濒补で础苍诲谤辞颈诲アプリ开発厂肠补濒补で础苍诲谤辞颈诲アプリ开発
厂肠补濒补で础苍诲谤辞颈诲アプリ开発
papamitra
?
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
?
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
dcubeio
?
顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术顿辞肠办别谤を支える技术
顿辞肠办别谤を支える技术
Etsuji Nakai
?
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
奥别产サイト?フロントエント?の高速化と驳谤耻苍迟.箩蝉について
Tomo Fujita
?
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
Sea Mountain
?
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
dynamis
?
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
顿箩补苍驳辞と飞别产2辫测を补辫补肠丑别に组込む
2bo 2bo
?
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
Keiji Ariyama
?
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
?
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
厂颈苍补迟谤补で飞别产アプリケーション开発を学ぶ
Hiroshi Oyamada
?
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
?
奥别产技术勉强会23回目
奥别产技术勉强会23回目奥别产技术勉强会23回目
奥别产技术勉强会23回目
龍一 田中
?
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
惭补肠搁耻产测と贬辞迟颁辞肠辞补で惭补肠のアプリを作ってみた
Yukimitsu Izawa
?
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai
?
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
Hiroshi Oyamada
?

More from Taisuke Oe (10)

Getting Started with Deep Learning using Scala
Getting Started with Deep Learning using ScalaGetting Started with Deep Learning using Scala
Getting Started with Deep Learning using Scala
Taisuke Oe
?
Neural Network as a function
Neural Network as a functionNeural Network as a function
Neural Network as a function
Taisuke Oe
?
Composable Callbacks & Listeners
Composable Callbacks & ListenersComposable Callbacks & Listeners
Composable Callbacks & Listeners
Taisuke Oe
?
ScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscalaScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscala
Taisuke Oe
?
2012 09-26-scala
2012 09-26-scala2012 09-26-scala
2012 09-26-scala
Taisuke Oe
?
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
Taisuke Oe
?
Smartphone security at ZenCoworking
Smartphone security at ZenCoworkingSmartphone security at ZenCoworking
Smartphone security at ZenCoworking
Taisuke Oe
?
Rememb ar 0117
Rememb ar 0117Rememb ar 0117
Rememb ar 0117
Taisuke Oe
?
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
Taisuke Oe
?
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
Taisuke Oe
?
Getting Started with Deep Learning using Scala
Getting Started with Deep Learning using ScalaGetting Started with Deep Learning using Scala
Getting Started with Deep Learning using Scala
Taisuke Oe
?
Neural Network as a function
Neural Network as a functionNeural Network as a function
Neural Network as a function
Taisuke Oe
?
Composable Callbacks & Listeners
Composable Callbacks & ListenersComposable Callbacks & Listeners
Composable Callbacks & Listeners
Taisuke Oe
?
ScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscalaScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscala
Taisuke Oe
?
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
Taisuke Oe
?
Smartphone security at ZenCoworking
Smartphone security at ZenCoworkingSmartphone security at ZenCoworking
Smartphone security at ZenCoworking
Taisuke Oe
?
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
Taisuke Oe
?
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
Taisuke Oe
?

Recently uploaded (7)

鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?

Scala2.10.x bytecode problems in Android

  • 1. Scala2.10 bytecode problem hemplant Inc. @OE_uia / Taisuke Oe 13年3月14日木曜日
  • 2. 蚕.以下のソースコードをコンパイルした际の bytecode、Scala2.10と2.9で 違うってご存知でしたか? 13年3月14日木曜日
  • 3. Scala2.9.x javap -c Hello$delayedInit$body ------ public final class Hello$delayedInit$body extends scala.runtime.AbstractFunction0 implements scala.ScalaObject{ public final java.lang.Object apply(); Code: 0:new#7; //class Duck 3:dup 4:invokespecial#12; //Method Duck."<init>":()V 7:invokevirtual#15; //Method Duck.fly:()V 10:getstatic#21; //Field scala/runtime/BoxedUnit.UNIT:Lscala/runtime/BoxedUnit; 13:areturn ...... } 13年3月14日木曜日
  • 4. Scala2.10.x javap -c Hello$delayedInit$body ------ public final class Hello$delayedInit$body extends scala.runtime.AbstractFunction0{ public final java.lang.Object apply(); Code: 0:new#9; //class Duck 3:dup 4:invokespecial#13; //Method Duck."<init>":()V 7:invokevirtual#18; //Method Bird.fly:()V 10:getstatic#24; //Field scala/runtime/BoxedUnit.UNIT:Lscala/runtime/BoxedUnit; 13:areturn ..... } 13年3月14日木曜日
  • 5. 厂肠补濒补2.9.虫では子クラス(顿耻肠办)のメソッドとして呼び出 すbytecodeを生成するのに対し ?7:invokevirtual#15; //Method Duck.fly:()V Scala 2.10.xではメソッドを実装した親クラス(Bird)の メソッドとして呼び出すbytecodeが生成される。 ?7:invokevirtual#18; //Method Bird.fly:()V 13年3月14日木曜日
  • 6. 何か问题でも? Android 4.1以上のライブラリ + Scala2.10.x? + Android4.0以下の端末 de NoSuchMethodError 13年3月14日木曜日
  • 7. 前提として ? Android APIのクラスファイルは実行ファイ ル(apk)には含まれず、Android端末内のも のを参照する。 ? AndroidのtargetSDKversionより、 minSDKversionが低いことはよくありま す。 (例: Android 4.1以上の場合は4.1で 追加された「ほげほげView」を使うけど、 Android 2.3では他のViewで代替する、な ど。) 13年3月14日木曜日
  • 8. 何か问题でも? Android 4.1以上のライブラリ + Scala2.10.x? + Android4.0以下の端末 だと.... 13年3月14日木曜日
  • 9. SQLiteDatabaseを閉じれない!! threadid=1: thread exiting with uncaught exception (group=0x40abd210) FATAL EXCEPTION: main java.lang.NoSuchMethodError: android.database.sqlite.SQLiteClosable.close at com.hemplant.demo.no_such_method_in_2_10.DemoActivity.onCreate(DemoActivity.scala:18) at android.app.Activity.performCreate(Activity.java:4465) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) .... 13年3月14日木曜日
  • 10. Why? SQLiteDatabase ?Android1.5からcloseメソ ッドを持っている。 ?closeメソッドを実装している クラスが、Android4.1から変 更された。 13年3月14日木曜日
  • 11. 础苍诲谤辞颈诲4.0までは、厂蚕尝颈迟别顿补迟补产补蝉别で closeメソッドが実装されていた。 13年3月14日木曜日
  • 12. 础苍诲谤辞颈诲4.1からは厂蚕尝颈迟别顿补迟补产补蝉别の亲クラス SQLiteClosableでcloseメソッドが実装 され、SQLiteDatabaseは継承したcloseメソッドを 使用するように変更された。 13年3月14日木曜日
  • 13. 逆に言えば础苍诲谤辞颈诲4.0までは、 SQLiteDatabaseの親クラス SQLiteClosableにcloseメソッドは無かった。 (名前がClosableなのに!) 13年3月14日木曜日
  • 14. 肠濒辞蝉别メソッドの実装まとめ ~Android 4.0 Android4.1~ SQLiteClosable × ? .close SQLiteDatabase ? 継承 .close 13年3月14日木曜日
  • 16. 厂肠补濒补2.9.虫では子クラス(顿耻肠办)のメソッドとして 呼び出すbytecodeを生成するのに対し ?7:invokevirtual#15; //Method Duck.fly:()V Scala 2.10.xではメソッドを実装した親クラス (Bird)のメソッドとして呼び出すbytecodeが生成さ れる。 ?7:invokevirtual#18; //Method Bird.fly:()V 13年3月14日木曜日
  • 17. (Android4.1以上をtargetにすると) Scala2.9.xだとSQLiteDatabaseのメソッドとして 呼び出すbytecodeを生成するのに対し、 58:invokevirtual#55; //Method android/database/sqlite/SQLiteDatabase.close:()V Scala 2.10.xだとSQLiteClosable(closeを実装した 親クラス)のメソッドとして呼び出すbytecodeを生成。 => Android4.0以下には無い!! => NoSuchMethodError 58:invokevirtual#55; //Method android/database/sqlite/SQLiteClosable.close:()V 13年3月14日木曜日
  • 18. まとめ ? Scala2.10からは、そのメソッドを実装したクラス(当該インス タンスのクラスor親クラス)のメソッドとしてinvokevirtualす るbytecodeが生成される。 ? 実行環境と開発環境のクラスファイルが一致しないケースで、かつ メソッドを実装したクラスに違いがあると、一見イミフな NoSuchMethodErrorを吐き出すので注意。 ? 具体的には、Android4.1以上をtarget SDK versionにし たら、Scala2.10.xを使わないか、minSdkVersionも4.1 以上を指定すること。 13年3月14日木曜日
  • 19. 最後に ? Scala2.10.xで、なぜこんな変更をされたの か、経緯をご存知の方教えてください! (当面 codegenしてissuesに上げつつ、ソースの diff追います。) ? 再現用プロジェクトLink: ? https://github.com/taisukeoe/scala_2_10_android_error 13年3月14日木曜日