自分は、巷に解説されるように プロジェクトとサブプロジェクトでライブラリも構築するという事はやっていませんでした。 複数プロジェクトからライブラリを参照しているからで、基本 jar ファイルを参照する方式をとっていました。
|-- Application | |- Foo | |- Bar | |-- Libraries | |-- Hoge | |-- Fuga | |-- Ref |-- Java | hoge.jar | fuga.jar | |-- Key debug.keystore release.keystoreeclipse ADT は、こんな感じですわ。
それを
|- Foo |- Bar |-- Hoge |-- Fuga |-- Ref |-- Java | hoge.jar | fuga.jar | |-- Key debug.keystore release.keystoreという構成に Android Studio では、しました。
まずは、ライブラリの移行です。
Android Studio から、 import project (eclipse ADT, gradle, etc) を選択しライブラリを変換します。
依存関係の構築を行うために
Hoge/app/build.gradleファイルを編集します。
apply plugin: 'com.android.application' android { compileSdkVersion 13 buildToolsVersion "23.0.1" defaultConfig { applicationId "jp.co.company.Hoge" minSdkVersion 13 targetSdkVersion 13 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } // ここに依存関係で使用しているライブラリを指定します。 dependencies { compile files('../../Ref/Java/helper.jar') compile files('../../Ref/Java/calc.jar') compile files('../../Ref/Java/sqlcipher.jar') } // 古い jar ファイルが存在した場合は削除するタスク task cleanDebugJar { def classes = new File('build/intermediates/bundles/debug/classes.jar') if( classes.exists() ) { delete '../../Ref/Java/hoge.jar' } } // debug でビルドした時は Hoge/app/build/intermediates/bundles/debug/classes.jar が // 生成されるようになっているので、それを共通のディレクトリにコピーするタスク task generateDebugJar(type: Copy, dependsOn: [cleanDebugJar,assembleDebug] ) { from 'build/intermediates/bundles/debug/' into '../../Ref/Java/' include('classes.jar') rename('classes.jar', 'hoge.jar') } /* // debug でビルドされる jar ファイルは、そのまま流用できる。 // release で自前で作成しても debug で作成されるものと同じなので // コメントアウトしている=必要ない。 // 将来的にデバッグ情報が付加された jar が生成されるとか // 状況が変われば、この辺のコードは有用かもしれない。 // release でビルドした時は、jar ファイルが生成されない。 // よって、自前で jar ファイルを生成するためのタスク task makeReleaseJar(type: Jar, dependsOn: assembleRelease) { from fileTree(dir: 'build/intermediates/classes/release') from fileTree(dir: 'src/main/resources/') into 'build/intermediates/bundles/release/classes.jar' } // 古い jar ファイルが存在した場合は削除するタスク task cleanReleaseJar { def classes = new File('build/intermediates/bundles/release/classes.jar') if( classes.exists() ) { delete '../../Ref/Java/release/hoge.jar' } } // jarファイルを共通のディレクトリにコピーするタスク task generateReleaseJar(type: Copy, dependsOn: [makeReleaseJar, cleanReleaseJar, assembleRelease]) { from 'build/intermediates/bundles/release/' into '../../Ref/Java/release/' include('classes.jar') rename('classes.jar', 'hoge.jar') } */ // 間抜けな事に Android Studio のビルドから Java class ファイルを // コンパイル生成した後に task を実行する手段が見つけられない。 // (Build -> Clean Project, Build -> Rebuild Project) // これは、ビルド・プロセスにおけるクリーンナップが行われる前に、前回生成した // *.class ファイルを jar 化したものに対して、コピー操作を行うという方法 // 2回ビルドしないと最新の jar にならない。 // IDEからビルドしただけでは動作しないので、皆ターミナルから、 // task を指定する形で実行している。 //assembleDebug.dependsOn(generateDebugJar) //assembleRelease.dependsOn(generateReleaseJar)コメントに書いてあるように、ターミナル・ウィンドウから
./gradlew generateDebugJarを実行します。
0 件のコメント:
コメントを投稿