SlideShare a Scribd company logo
1 of 19
Download to read offline
Scala2.10
   bytecode problem
              hemplant Inc. @OE_uia / Taisuke Oe




13年3月14日木曜日
Q.以下のソースコードをコンパイルした際の
               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日木曜日
Scala2.9.xでは子クラス(Duck)のメソッドとして呼び出
す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日木曜日
Android4.0までは、SQLiteDatabaseで
              closeメソッドが実装されていた。




13年3月14日木曜日
Android4.1からはSQLiteDatabaseの親クラス
              SQLiteClosableでcloseメソッドが実装
     され、SQLiteDatabaseは継承したcloseメソッドを
                  使用するように変更された。




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




13年3月14日木曜日
closeメソッドの実装まとめ


                     ~Android 4.0   Android4.1~


    SQLiteClosable
                          ×             ⃝
        .close

    SQLiteDatabase
                          ⃝             継承
         .close




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




13年3月14日木曜日
Scala2.9.xでは子クラス(Duck)のメソッドとして
    呼び出す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

クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについてSuguru ARAKAWA
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Clooaokomoriuta
 
俺のRails開発環境
俺のRails開発環境俺のRails開発環境
俺のRails開発環境joker1007
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalkSho Yoshida
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門Masashi Umezawa
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Uehara Junji
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradleNobuhiro Sue
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 

What's hot (13)

TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
 
GContractsの基礎
GContractsの基礎GContractsの基礎
GContractsの基礎
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
俺のRails開発環境
俺のRails開発環境俺のRails開発環境
俺のRails開発環境
 
Molecule入門
Molecule入門Molecule入門
Molecule入門
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
 
Gws 20120521 gradle
Gws 20120521 gradleGws 20120521 gradle
Gws 20120521 gradle
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 

Viewers also liked

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 viewpointlyrical_logical
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめYusuke Matsushita
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Ra Zon
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた ScalaRyuji Yamashita
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaKazuhiro Sera
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekKazuhiro 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_r24Kazuhiro Sera
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slidesOCaml
 
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
 

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
 
Scala web framework比較
Scala web framework比較Scala web framework比較
Scala web framework比較
 
関数型プログラミングのすゝめ
関数型プログラミングのすゝめ関数型プログラミングのすゝめ
関数型プログラミングのすゝめ
 
Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]Scalaで萌える関数型プログラミング[完全版]
Scalaで萌える関数型プログラミング[完全版]
 
Skinny 2 Update
Skinny 2 UpdateSkinny 2 Update
Skinny 2 Update
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
めんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scalaめんどくさくない Scala #kwkni_scala
めんどくさくない Scala #kwkni_scala
 
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageekJava エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
Java エンジニアチームが始めやすい Scala コーディングスタイル #ichigayageek
 
[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
 
Unityでreflection入門
Unityでreflection入門Unityでreflection入門
Unityでreflection入門
 
O caml2014 leroy-slides
O caml2014 leroy-slidesO caml2014 leroy-slides
O caml2014 leroy-slides
 
Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 

Similar to Scala2.10.x bytecode problems in Android

ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術Etsuji Nakai
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてTomo Fujita
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Sea Mountain
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid SystemKeiji Ariyama
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memoKiyotaka Oku
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたYukimitsu Izawa
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7Hiroshi Oyamada
 

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

ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
Dockerを支える技術
Dockerを支える技術Dockerを支える技術
Dockerを支える技術
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについて
 
Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3Ruby on Rails3 Tutorial Chapter3
Ruby on Rails3 Tutorial Chapter3
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
Realmの暗号化とAndroid System
Realmの暗号化とAndroid SystemRealmの暗号化とAndroid System
Realmの暗号化とAndroid System
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
Jenkins plugin memo
Jenkins plugin memoJenkins plugin memo
Jenkins plugin memo
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみた
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
Heroku java
Heroku javaHeroku java
Heroku java
 
20130412 titanium meetupvol7
20130412 titanium meetupvol720130412 titanium meetupvol7
20130412 titanium meetupvol7
 

More from 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 ScalaTaisuke Oe
 
Neural Network as a function
Neural Network as a functionNeural Network as a function
Neural Network as a functionTaisuke Oe
 
Composable Callbacks & Listeners
Composable Callbacks & ListenersComposable Callbacks & Listeners
Composable Callbacks & ListenersTaisuke Oe
 
ScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscalaScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscalaTaisuke Oe
 
2012 09-26-scala
2012 09-26-scala2012 09-26-scala
2012 09-26-scalaTaisuke Oe
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalkTaisuke Oe
 
Smartphone security at ZenCoworking
Smartphone security at ZenCoworkingSmartphone security at ZenCoworking
Smartphone security at ZenCoworkingTaisuke Oe
 
Rememb ar 0117
Rememb ar 0117Rememb ar 0117
Rememb ar 0117Taisuke Oe
 
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jpTaisuke Oe
 
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jpTaisuke Oe
 

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
 
Neural Network as a function
Neural Network as a functionNeural Network as a function
Neural Network as a function
 
Composable Callbacks & Listeners
Composable Callbacks & ListenersComposable Callbacks & Listeners
Composable Callbacks & Listeners
 
ScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscalaScalaDays 2015 SF report #rpscala
ScalaDays 2015 SF report #rpscala
 
2012 09-26-scala
2012 09-26-scala2012 09-26-scala
2012 09-26-scala
 
AmazonElasticBeanstalk
AmazonElasticBeanstalkAmazonElasticBeanstalk
AmazonElasticBeanstalk
 
Smartphone security at ZenCoworking
Smartphone security at ZenCoworkingSmartphone security at ZenCoworking
Smartphone security at ZenCoworking
 
Rememb ar 0117
Rememb ar 0117Rememb ar 0117
Rememb ar 0117
 
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
 
Share english communication tips jp
Share english communication tips jpShare english communication tips jp
Share english communication tips jp
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

Scala2.10.x bytecode problems in Android

  • 1. Scala2.10 bytecode problem hemplant Inc. @OE_uia / Taisuke Oe 13年3月14日木曜日
  • 2. Q.以下のソースコードをコンパイルした際の 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. Scala2.9.xでは子クラス(Duck)のメソッドとして呼び出 す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. Android4.0までは、SQLiteDatabaseで closeメソッドが実装されていた。 13年3月14日木曜日
  • 12. Android4.1からはSQLiteDatabaseの親クラス SQLiteClosableでcloseメソッドが実装 され、SQLiteDatabaseは継承したcloseメソッドを 使用するように変更された。 13年3月14日木曜日
  • 13. 逆に言えばAndroid4.0までは、 SQLiteDatabaseの親クラス SQLiteClosableにcloseメソッドは無かった。 (名前がClosableなのに!) 13年3月14日木曜日
  • 14. closeメソッドの実装まとめ ~Android 4.0 Android4.1~ SQLiteClosable × ⃝ .close SQLiteDatabase ⃝ 継承 .close 13年3月14日木曜日
  • 16. Scala2.9.xでは子クラス(Duck)のメソッドとして 呼び出す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日木曜日