2014/09/16

[android]AndroidライブラリとJavaライブラリ

Android Studioでライブラリの作り方がわからない、と書いていたら、教えてくれた。
http://hiro99ma.blogspot.com/2014/09/androidandroid-studio_14.html?showComment=1410834685828#c2233468687230081908

ライブラリ単独のプロジェクトじゃなくて、モジュールとして追加するのね。

image

ライブラリが2つある・・・。
「Android Library」と「Java Library」だ。

Android Library
image

Java Library
image

 

こちらによると、リソースなどもまとめられるのがAndroid Libraryで、Android ARchiveってことでaarファイルができるらしい。
その中にjarも入るそうだ。

Android Studio で簡単に jar をつくる手順はないのかと

今作っているNFCライブラリはリソースを含んでないのでjarファイルでよさそうだ。
そう思ってJava Libraryを選んでみたのだが・・・なんか、なんかだめだ。
たぶん、Android用じゃないから、パスの設定なんかがされてないんだろう。

あまり深く考えるのはやめ、AARというやつでやってみよう。


NfcLib、というモジュールを追加した。

image

build.gradleの違いは、

apply plugin: 'com.android.application'

が、

apply plugin: 'com.android.library'

となってるくらいか。

resフォルダなども入っているので削除し、appで使っていたJavaファイルを移動させた。
AndroidManifest.xmlも削除したのだが、なんか「同期エラー」みたいなのが発生したので、形だけ残すことにした。

あと「File>Project Structure...」で、appがNfcLibに依存している設定を追加。
いるのかいらんのかわからん設定だが、依存しているのは確かだから、悪くはなかろう。

image

ここからがよくわからないのだが、ModuleのcleanやRebuildをやっていくと、勝手にNfcLib/build/outputs/aarの中にNfcLib.aarができていた。
cleanしたら、作り直しているみたいだが、まあいいや。


aarはzipらしいので解凍すると、classes.jarとAndroidManifest.xmlが入っていた。

>jar tvf classes.jar
     0 Tue Sep 16 12:59:28 JST 2014 META-INF/
    25 Tue Sep 16 12:59:28 JST 2014 META-INF/MANIFEST.MF
     0 Tue Sep 16 12:59:28 JST 2014 com/
     0 Tue Sep 16 12:59:28 JST 2014 com/blogpost/
     0 Tue Sep 16 12:59:28 JST 2014 com/blogpost/hiro99ma/
     0 Tue Sep 16 12:59:28 JST 2014 com/blogpost/hiro99ma/nfc/
 23770 Tue Sep 16 12:59:28 JST 2014 com/blogpost/hiro99ma/nfc/FelicaLite.class
  7324 Tue Sep 16 12:59:28 JST 2014 com/blogpost/hiro99ma/nfc/NfcFactory.class
     0 Tue Sep 16 12:59:28 JST 2014 hiro99ma/
     0 Tue Sep 16 12:59:28 JST 2014 hiro99ma/blogpost/
     0 Tue Sep 16 12:59:28 JST 2014 hiro99ma/blogpost/com/
     0 Tue Sep 16 12:59:28 JST 2014 hiro99ma/blogpost/com/lites_sample/
   748 Tue Sep 16 12:59:28 JST 2014 hiro99ma/blogpost/com/lites_sample/BuildConfig.class

いや、最後のBuildConfig.classなんて頼んでないんですが・・・。
アプリと一緒にしてるから入ってくるのか。
しかもこれ、最初にパッケージ名を付け間違えたときのパスじゃないか。。。

 

あと、ProGuardをかけるとエラーになった。

Error:Execution failed for task ':NfcLib:proguardRelease'.
> java.io.IOException: The output jar is empty. Did you specify the proper '-keep' options?

うーん、アプリの方に置いていたときは問題なかったのだが・・・。
seeds.txtもあるが、だめなのか。


proguard-rules.proの書き方がよろしくなかったようだ。

-keepattributes Exceptions
-keep class com.blogpost.hiro99ma.nfc.**
-keepclassmembers class com.blogpost.hiro99ma.nfc.FelicaLite {
    public *;
}
-keepclassmembers class com.blogpost.hiro99ma.nfc.NfcFactory {
    public *;
}

こんな感じにした。
-keepだけだとだめで、-keepclassmembersだけでもだめで、両方設定すると名前が残った。
あと、throwsが消えてしまったので、Exceptionsも追加した。

と、こんなに苦労してProGuardかけたけど、jadで見るとそれなりにわかるもんだな。
まあ、資料見ながら作っただけの実装なので、そんなに隠すまでもないか、とは思うが、「できることはやった」という気分になれるし、サイズも小さくなるから、いいのだ!

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。