SlideShare a Scribd company logo
1 of 34
MultiDexApplication の
実装詳細について
茂木 勇
目次
●
モチベーション … 1 分
●
ビルド時 … 1.5 分
●
実行時 … 2 分
モチベーション
メソッド 64k 制限つらい
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
⇨ それを回避する groovy スクリプトを書く
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
⇨ それを回避する groovy スクリプトを書く
● min sdk version を ART 版限定にする
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
⇨ それを回避する groovy スクリプトを書く
● min sdk version を ART 版限定にする
● NDK で外出し
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
⇨ それを回避する groovy スクリプトを書く
● min sdk version を ART 版限定にする
● NDK で外出し
● MultiDex
モチベーション
メソッド 64k 制限つらい
● メソッド数が多い Guava を諦める
● ProGuard でメソッド数を減らす
⇨ AndroidTest ができなくなる
⇨ それを回避する groovy スクリプトを書く
● min sdk version を ART 版限定にする
● NDK で外出し
● MultiDex
モチベーション
MultiDex
● dex の分割を利用した 64k 制限回避バッドノウ
ハウを整理、ライブラリ化したもの
● なぜか私もコミット権限を持っている
● 最近 Google のソースにマージされた
モチベーション
MultiDex のリファレンス
https://developer.android.com/reference/android/su
モチベーション
MultiDex のリファレンス
モチベーション
MultiDex のリファレンス
モチベーション
MultiDex のリファレンス
モチベーション
モンキーパッチ
● やばい予感がする
モチベーション
モンキーパッチ
● やばい予感がする
● 皆様に代わって、私が軽く調査しておきました
ビルド時
'14 12/16 時点でのビルド関連ソースはここ
– https://android.googlesource.com/platform/tools/base/
MultDex 関連
– https://android.googlesource.com/platform/tools/base/+/
ビルド時
方針
1.アプリを分割するが、結合するための処理もア
プリ内にあるため、起動や結合するための処理
をするクラス一覧を作る
2.その一覧を使ってアプリを分割する
ビルド時
実際の内部で起こっている手順 (1/2)
● 普通に class ファイルを作る
● Application クラスなどの起動時に必要なクラス
と MultiDex 復元処理用のクラスのみ keep して
ProGuard をかける
● 残ったクラスは起動時に必要なため、分割せず
起動時に読み込むリスト (main dex list) に追加
– そのリストのメソッド数が 64k を超えると脂肪
– ProGuard がエラーで失敗することもある
ビルド時
実際の内部で起こっている手順 (2/2)
● 内部で実行されている dex コマンドに下記を付
加
–-multi-dex オプション
--main-dex-list オプションに、さっき作った起
動時に読み込むリストを渡す
● 分割された dex はまとめて 1 つの apk に入る
実行時
'14 12/16 時点での実行時のモンキーパッチの
ソースはこちら
● https://android.googlesource.com/platform/framewo
クラスローダーのソースは例えばこちら
● https://android.googlesource.com/platform/libcore/+
実行時
方針
実は、 Android の ClassLoader はすでに継承な
どにより拡張することで MultiDex の対応を行
うことができるようになっていた
1.Android バージョンにより処理分岐
2.Dex ファイルを展開する
3.リフレクションを使って ClassLoader の中身を
書き換え
実行時
実際の内部で起こっている手順 (1/5)
● MultiDexApplication#attachBaseContext で起動
● バージョンを確認して処理を分ける
– ART が入っている場合は、インストール時に dex
が oat に変換されるため何もしない
– API Level 3 以下の場合はエラー
実行時
実際の内部で起こっている手順 (2/5)
● apk の zip ファイルを展開し分割された dex フ
ァイルを取り出す。これは毎回やる!
– StrictMode 大丈夫か?
実行時
実際の内部で起こっている手順 (3/5) API 19~
● クラスローダーの中身を書き換える
class BaseDexClassLoader extends ClassLoader {
private final DexPathList pathList;
}
class DexPathList {
private final Element[] dexElements;
}
実行時
実際の内部で起こっている手順 (3/5) API 19~
● クラスローダーの中身を書き換える
class BaseDexClassLoader extends ClassLoader {
private final DexPathList pathList;
}
class DexPathList {
private final Element[] dexElements;
} ここに分割された dex ファイルを追加
実行時
実際の内部で起こっている手順 (4/5) API 14~
● クラスローダーの中身を書き換える (19 とほぼ同一 )
class BaseDexClassLoader extends ClassLoader {
private final DexPathList pathList;
}
class DexPathList {
private final Element[] dexElements;
}
実行時
実際の内部で起こっている手順 (4/5) API 14~
● クラスローダーの中身を書き換える (19 とほぼ同一 )
class BaseDexClassLoader extends ClassLoader {
private final DexPathList pathList;
}
class DexPathList {
private final Element[] dexElements;
}
ここに分割された dex ファイルを追加
実行時
実際の内部で起こっている手順 (5/5) API 4~
● クラスローダーの中身を書き換える
class PathClassLoader extends ClassLoader {
private final String path;
private final String[] mPaths;
private final File[] mFiles;
private final ZipFile[] mZips;
private final DexFile[] mDexs;
}
実行時
実際の内部で起こっている手順 (5/5) API 4~
● クラスローダーの中身を書き換える
class PathClassLoader extends ClassLoader {
private final String path;
private final String[] mPaths;
private final File[] mFiles;
private final ZipFile[] mZips;
private final DexFile[] mDexs;
}
これらに分割された dex ファイルを追加
結論
● 元々あった機能を有効化しているだけのため、
そこまで危険には見えない
● それより下記が許容できるかが問題な気がする
– ビルド時の ProGuard 。 scala-library みたいな変な
クラスが入っているとコケる。
– 起動時に必要と判断されるクラスが 64k を超えたら
コケる。
● 手動で指定する方法もある
– 起動時 zip 展開が毎回走る。重いかも。 StrictMode
は ?
CM
● Android Scala Plugin というのを作っています
– https://github.com/saturday06/gradle-android-scala-
plugin
– GitHub のスターが 100 超えました!
● ABC で LT します
● Android でも Swift っぽい言語がやりたい場合は
ぜひ試してみてください
● Jack/Jill の対応は無理かも

More Related Content

What's hot

Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Tomoaki Shimizu
 
Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Yasuhiro Matsuda
 
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」Tomoaki Shimizu
 
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」Tomoaki Shimizu
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Tomoaki Shimizu
 
cocos2d-xとCocos Code IDE
cocos2d-xとCocos Code IDEcocos2d-xとCocos Code IDE
cocos2d-xとCocos Code IDETomoaki Shimizu
 
Cocos Code IDEを使ってみた
Cocos Code IDEを使ってみたCocos Code IDEを使ってみた
Cocos Code IDEを使ってみたTomoaki Shimizu
 
cocos2d-xにおけるマップエディタの利用
cocos2d-xにおけるマップエディタの利用cocos2d-xにおけるマップエディタの利用
cocos2d-xにおけるマップエディタの利用Tomoaki Shimizu
 
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」Tomoaki Shimizu
 
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」Tomoaki Shimizu
 
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-PocketNetwalker lab kapper
 
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Tomoaki Shimizu
 
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06Yahoo!デベロッパーネットワーク
 
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」Tomoaki Shimizu
 
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めました
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めましたCocos2d-x&CocosCodeIDE&Luaで個人開発始めました
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めましたYasuhiro Matsuda
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るYu Nobuoka
 
Cocos2d xをさわってみよう!
Cocos2d xをさわってみよう!Cocos2d xをさわってみよう!
Cocos2d xをさわってみよう!Tomoaki Shimizu
 

What's hot (20)

Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
Cocos2d-x(JS) ハンズオン #07「新エディタ Cocos Creator v1.0」
 
Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介Cocos2d-x(JS)の紹介
Cocos2d-x(JS)の紹介
 
Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05Cocos2d-x勉強会 2014/10/05
Cocos2d-x勉強会 2014/10/05
 
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
Cocos2d-x(JS) ハンズオン #06「3rd SDKの導入を簡単にするSDKBOX」
 
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
Cocos2d-x(JS) ハンズオン #12「Cocos2d-xとSpine」
 
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
Cocos2d-x(JS) ハンズオン #08「様々な画像描画方法」
 
cocos2d-xとCocos Code IDE
cocos2d-xとCocos Code IDEcocos2d-xとCocos Code IDE
cocos2d-xとCocos Code IDE
 
Cocos Code IDEを使ってみた
Cocos Code IDEを使ってみたCocos Code IDEを使ってみた
Cocos Code IDEを使ってみた
 
cocos2d-xにおけるマップエディタの利用
cocos2d-xにおけるマップエディタの利用cocos2d-xにおけるマップエディタの利用
cocos2d-xにおけるマップエディタの利用
 
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
Cocos2d-x(JS) ハンズオン #03「複数あるボタンの使い分け」
 
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
Cocos2d-x(JS) ハンズオン #11「2D物理エンジン」
 
Cocos2d-x 3D Extension
Cocos2d-x 3D ExtensionCocos2d-x 3D Extension
Cocos2d-x 3D Extension
 
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket
#GPD-Pocket にUbuntu17.04をインストール Install Ubuntu Linux 17.04 on GPD-Pocket
 
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
Cocos2d-x(JS) ハンズオン #02 「画像表示とアクション」
 
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
Cocos2d-JSと物理演算で作る横スクロールアクションゲーム #scripty06
 
Ndk
NdkNdk
Ndk
 
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
Cocos2d-x(JS) ハンズオン #04「タッチイベントの使い方」
 
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めました
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めましたCocos2d-x&CocosCodeIDE&Luaで個人開発始めました
Cocos2d-x&CocosCodeIDE&Luaで個人開発始めました
 
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作るAndroid アプリを Jenkins でビルドして GitHub に “リリース” を作る
Android アプリを Jenkins でビルドして GitHub に “リリース” を作る
 
Cocos2d xをさわってみよう!
Cocos2d xをさわってみよう!Cocos2d xをさわってみよう!
Cocos2d xをさわってみよう!
 

Similar to Potatotops20141217

Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードKazuhiro Hara
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Hiro Yoshioka
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacksHiro Yoshioka
 
リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習Kouhei Sutou
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in DartGoro Fuji
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後Kouhei Sutou
 
LINTから理解するTDD
LINTから理解するTDDLINTから理解するTDD
LINTから理解するTDDMasafumi Sasaki
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8civic Sasaki
 
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジSEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジKouhei Sutou
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
SEゼミ2015 - 練習
SEゼミ2015 - 練習SEゼミ2015 - 練習
SEゼミ2015 - 練習Kouhei Sutou
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例UnityTechnologiesJapan002
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」ManaMurakami1
 
SEゼミ2014 - 練習
SEゼミ2014 - 練習SEゼミ2014 - 練習
SEゼミ2014 - 練習Kouhei Sutou
 
SEゼミ2014 - 練習
SEゼミ2014 - 練習SEゼミ2014 - 練習
SEゼミ2014 - 練習Kouhei Sutou
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグl_b__
 

Similar to Potatotops20141217 (20)

Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習リーダブルコード勉強会 in 筑波大 - 練習
リーダブルコード勉強会 in 筑波大 - 練習
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
 
リーダブルコードを読んだ後
リーダブルコードを読んだ後リーダブルコードを読んだ後
リーダブルコードを読んだ後
 
LINTから理解するTDD
LINTから理解するTDDLINTから理解するTDD
LINTから理解するTDD
 
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
むずかしくないJavaScriptのやさしい話 jQueryからの次のステップ #ndsmeetup8
 
SEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジSEゼミ2014 - コードチェンジ
SEゼミ2014 - コードチェンジ
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
SEゼミ2015 - 練習
SEゼミ2015 - 練習SEゼミ2015 - 練習
SEゼミ2015 - 練習
 
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
【Unite Tokyo 2019】運用中超大規模タイトルにおけるUnityアップデート課題の解決手法と事例
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
SEゼミ2014 - 練習
SEゼミ2014 - 練習SEゼミ2014 - 練習
SEゼミ2014 - 練習
 
SEゼミ2014 - 練習
SEゼミ2014 - 練習SEゼミ2014 - 練習
SEゼミ2014 - 練習
 
Eclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグEclipseを使ったandroid nativeデバッグ
Eclipseを使ったandroid nativeデバッグ
 

Potatotops20141217