Upgrade to Pro — share decks privately, control downloads, hide ads and more …

multi module へ向けて

Tomoya Miwa
September 28, 2018

multi module へ向けて

Tomoya Miwa

September 28, 2018
Tweet

More Decks by Tomoya Miwa

Other Decks in Programming

Transcript

  1. About me tomoya0x00 Twitter, GitHub, Qiita Android, Embedded system, BLE/BT,

    iOS DeNA Co., Ltd. Automotive Business Unit. 最近、 deploy.fm (podcast) に出演させていただきました https://takattata.github.io/deployfm/episode/01-main
  2. internal アクセス修飾⼦ internal — any client inside this module who

    sees the declaring class sees its internal members; https://kotlinlang.org/docs/reference/visibility-modi ers.html 極⼒、ナビmoduleのclassをinternalにして公開するものを絞る 公開するdata classの⼀部プロパティで⾒せたくないものを隠す C⾔語でヘッダにstructの空定義だけして公開する感じ︖
  3. 補⾜︓公開するdata classの⼀部プロパ ティで⾒せたくないものを隠す data class CarLocation( val longitude: Double, val

    latitude: Double, val direction: Double, val speed: Double? = null, internal val hoge: Int, // ナビmodule外からは⾒えない internal val fuga: Int // ナビmodule外からは⾒えない )
  4. implementation or api 例︓ナビmoduleのbuild.gradle dependencies { // libsディレクトリにあるナビSDK(aar)に依存 // ★ナビmodule外から直接ナビSDKにアクセスできてしまう★

    api fileTree(dir: 'libs', include: ['*.aar']) } dependencies { // libsディレクトリにあるナビSDK(aar)に依存 // ナビmodule外からは⾒えない implementation fileTree(dir: 'libs', include: ['*.aar']) }
  5. 公開クラスにナビSDKのinterfaceを実 装してビルドエラー // ナビmodule class NaviEngine: NaviSdkListener { ... }

    // アプリ class Hoge { val naviEngine = NaviEngine() // NaviSdkListener not found! }
  6. 公開クラスにナビSDKのinterfaceを実 装してビルドエラー // ナビmodule class NaviEngine { val listener =

    object: NaviSdkListener { ... } } // アプリ class Hoge { val naviEngine = NaviEngine() // OK! }