はじめに
Android Studioのライブラリプロジェクトでjarファイルを作成してみましょう
私はOSX 10.9.4, Android Studio (Beta) 0.8.1, ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin13.0.2]で確認しました
ライブラリプロジェクトを作成する
ライブラリ名はHogeとして話を進めます
moduleのbuild.gradleを以下に設定します
apply plugin: 'com.android.library'
aarファイルを作成する
aarファイルとはAndroid archiveファイルの略で、jarファイルのクラスファイル以外にリソースを含んでいます
次のコマンドを実行します
$ ./gradlew clean
$ ./gradlew aR
aRはassembleReleaseの略です
build/outputs/aarにHoge.aarファイルが生成されます
jarファイル
Hoge.aarはzipファイルで中にclasses.jarが含まれています。このclasses.jarファイルが欲しいファイルですが、解凍して名前を変更するのは面倒です。そこでaarファイルからclasses.jarを抽出し、名前をHoge.jarに変更するrubyスクリプトを作成しました
jarファイルを生成するrubyスクリプト
zipファイルを扱うために、rubyzip gemをインストールします
$ gem install rubyzip
jarファイルを生成するrubyスクリプトは以下のとおりです
require 'zip'
if ARGV.size == 0
puts 'usage : ruby unzip.rb [aar filname]'
exit
end
aar_file = ARGV[0]
TEMP_DIR = 'temp'
Dir.mkdir(TEMP_DIR) unless FileTest.exist?(TEMP_DIR)
FileUtils.copy(aar_file, "#{TEMP_DIR}/#{aar_file}", {})
Dir.chdir(TEMP_DIR) do
Zip::File.open(aar_file) do |zip|
zip.each do |entry|
zip.extract(entry, entry.to_s) { true }
end
end
end
filename = File.basename(aar_file, ".aar")
lib_filename = "#{filename}.jar"
Dir.chdir(TEMP_DIR) do
FileUtils.mv('classes.jar', lib_filename)
end
FileUtils.copy("#{TEMP_DIR}/#{lib_filename}", "#{lib_filename}")
FileUtils.rm_rf(TEMP_DIR)
第一引数にHoge.aarを指定します
$ ruby make_jar.rb ./Hoge.aar
実行したディレクトリにHoge.jarが生成されます。なお、ワークディクレトリとして、カレントディレクトリにtempディレクトリを作成し、スクリプト終了時にtempディレクトリを削除しています
ライブラリを組み込む
ライブラリを使用するAndroidプロジェクトのapps/libs/以下にHoge.jarをコピーします
build.gradleに依存情報を記述します
dependencies {
compile files('libs/Hoge.jar')
}
おわりに
手作業で行うことは可能ですが、面倒ですので、自動化できるところは自動化することがよい思います