#navi_header|技術| Androidで、ClassLoaderをカスタマイズして実行時にモジュールをロードする方法について参考リンクをメモ。 - Android Developers Blog: Custom Class Loading in Dalvik -- http://android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html 流れとしてはdexファイルを読み込んでパッケージローカルに保存、DexClassLoaderを使ってloadClass()する。 ただしこの時注意点があって、DexClassLoaderのコンストラクタには"Optimized Dex"ファイルの出力先ディレクトリを指定する引数がある。これをうっかりSDカードにしてしまうと、SDカードはパーミッション制御の範囲外になるので、悪意のあるアプリによって置き換えられてしまう可能性がある。 "dexファイルを読み込んで・・・"と書いてしまっているが、実際は"dexファイルが入ってるだけのjarファイル"なのでそこだけ注意。 ということで、動的なClassLoadingを行うときのセキュリティ上の注意点についてはとりあえず下記参照。 - Android Class Loading Hijacking | Symantec Connect Community -- http://www.symantec.com/connect/blogs/android-class-loading-hijacking --- SharedLibraryのpathを指定できるPathClassLoaderの解説も含む。 あと変わり種としてはPackageManagerを使って任意のパッケージからclassを取り出すサンプル: - Android ClassLoader - dynamic loading of class by name | Android Apps by Doenter Limited -- http://doandroids.com/blogs/2010/6/10/android-classloader-dynamic-loading-of/ --- ApplicationInfoクラスのsourceDirフィールドを活用。 プラットフォーム的な仕組みであるとか、プラグインモジュールのアーキテクチャに使うと面白そうです。 ただし、Android Developers Blog の記事にもありますが、ロードするDexファイルをビルドするためにAntを使わざるをえないなど、開発に一手間加わってしまう点に注意。 #navi_footer|技術|