2015年3月23日月曜日

おまけ

gradlew で ndk-build を直接実行した場合
app\build\intermediates\ndk\debug に Android.mk がその都度作成されるようです
ですので build.gradle 内の ndk{} で色々記載した結果が
本来実行したい Android.mk の内容と同じになれば
gradlewから直接コンパイルができる様になると思われます

2015年3月19日木曜日

いつのまにかAndroid Studio になってました JNI のコンパイルでハマりました

3年前から別件で忙しく全然更新していなかったら
いつのまにか開発環境がAndroid Studioになってました
そこでとりあえず ADTの環境から引っ越しです

前にやっていたのは
NativeActivity のゲームシステム構築開始で絵の表示を
libpng.a で行う実験中でした
これを実験半ばでAndroid Studioに移行することから始めた訳ですが・・・

・問題点
 スタティックライブラリである libpng.a がどうしてもgradle環境に移行出来ない
 src\main\jniLibs\armeabiに入れてもリンクしない
 
 常駐ライブラリと扱い
 android-ndk-r10d\platforms\android-?\arch-arm\usr\lib に追加しても
 リンク後に変なエラーが出る
 等々
 
最終的に従来のAndroid.mk を使う事に落ち着きましたが
ネットで先駆者の人達の情報を見ても一筋縄では行かなかったので
ここにメモします

・手法
1)Android Studio のTerminal から ndk-build の実行
 いろいろと検討した結果面倒だったので
 このコマンドが置いてある位置をシステムパスに追加しました

2)実行後に出来た libnative-activity.soの移動
 これの手作業です 自動化の方法もありそうですが後で考えます
 1)を実行すると src\main\libs\armeabiにできるので
 これを src\main\jniLibs\armeabiにコピーします
 
3)Android Studioの Run->Debug'app' の実行
 この実行の時に 上記libnative-activity.soを作成しないように
 app/gradle の内容に二点手を加えます

   sourceSets.main {
        jniLibs.srcDir 'src/main/jniLibs'
        jni.srcDirs = [] // 1)これでCソースのコンパイルは行いません
    }

    defaultConfig {
        applicationId "jp.gr.java_conf.omoshiroya.NAPng"
        minSdkVersion 10
        targetSdkVersion 10
    }
/* //2)念のため プロジェクト移行で作成されたndk指定をコメントアウト

    ndk {
    }
*/

書いてみると簡単な事ですが2日掛かりました・・・