なんだか滅茶苦茶つまってしまったので残します.
根本原因は解決していない・・・
Intellijでは,他モジュールに依存する場合,シンボルを見つけられないことがある
なぜ?これは時間がなくて対策を見つけることが出来ませんでした.一応途中まであっていると思うので備忘録的に残しておく.
経緯としては,Android Studioで作成したクラスをサーバー側プログラムでも使用したいので,サーバープログラム⇒Android appに依存性を持たせたかった.
[Project Setting]⇒[Android studioの*.imi]
でプロジェクト内にモジュールを追加できます.
依存させたい側(今回はServer側モジュール)のDependenciesで依存される側(Android App)のモジュールへの依存性を追加します.
これで[OK]ボタンを押すと再読み込みが始まります.ここで,新しいモジュール内のクラスが使用できない場合は,Android AppがSourceとして認識されないので,srcにSources属性を付与します.
これで少なくともIntellijのInspectionは通過し,問題なくAndroid Appのクラスを使用できるようになります.しかしビルドしようとすると・・・・
java: package {package name} does not exist
java: cannot find symbol symbol: class {class name} location: class {class location}
のようなエラーがでて,ビルドできません.どうしてなんでしょうか?どなたかわかる方教えてください・・・・.下記のような対策を行っても治りませんでした.
上記の対策一般
cannot find symbolが発生した場合には,一般に以下の手法が有効なようです.
①Cacheを一度消去する
②Build > Rebuild Project を行う
なお,私の場合なりませんでした.
Android Studioのクラスをjar化してライブラリとして参照する
結局,手間でしたが上記の手法を取ることにしました.
アプリ モジュールをライブラリ モジュールに変換するの章を参考にしましょう.
手順としては,Project直下にあるappモジュールのbuild.gradleに以下の変更を加えます.
①pluginをcom.android.libraryに変更する
②applicationIdをコメントアウトする
これでGradle > buildを行ってください.ただし,一部jar化するにあたって,Rライブラリに対してswitchは使えないと言われたりすることがありますが,AndroidのSuggestion通りに修正すれば無事build successできます.
作製されたファイルは
app/build/outputs/aar/xxx.aar
に存在しています.aarはandroid archive の略称のようで,単純なzipファイルのようです.これをunzipで解凍するとclasses.jarが中に存在しますので,これを適当な箇所において,それをサーバー側のモジュールでライブラリとして追加しましょう.
Gradleってなんだか凄く苦手・・・.Mavenのほうが分かりやすいです.またいつかしっかり勉強して使いこなせるようになろう・・.正直わざわざ解凍して配置して,っていうのは面倒くさいので,ここを一括でできるようになりたいね・・・・.