Android NDK(Cmake)を使ったプロジェクトで native libraryのsoの場所を android_gradle_build.json を使って探す

小ネタです。プロジェクトのフォルダで以下のコマンド叩けばsoの場所がわかります。

Linuxです。楽したいのでjqも使ってます。

例:

$ find . -name "android_gradle_build.json" | grep debug | grep armeabi-v7a | xargs jq '.libraries | .[].output'
"/home/kaki/Practice/Android/GlApplication/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so"

途中に挟まってるgrepを消すと、各flaver、各abiのjsonファイルが見つかるはずです。

そもそも出来る場所くらい知ってるよという話はあってそれはそうなんですが、勝手に用意してくれる android_gradle_build.json からコンパイルオプションだとかファイルだとかが取れるので何か便利に使いたいなーという気持ちがありました。 android_gradle_build.json については

CMake | Android Developers

に記述がありました。そのほか「releaseビルドでもstripされてない(APKにするときにstripされる)」とか、一通り読むとへぇ〜な事が書いてありました。 上の例ではsoの場所を出してるだけですがそれなりに情報が入ったjsonになってます。

buildCommandとか書かれてるので、ここらへんに何かねじ込んで実験してみるのも面白そうですねどうなるんでしょう

 GlApplication find . -name "android_gradle_build.json" | grep debug | grep armeabi-v7a | xargs jq '.libraries'
{
  "native-lib-Debug-armeabi-v7a": {
    "abi": "armeabi-v7a",
    "artifactName": "native-lib",
    "buildCommand": "/home/kaki/sdk/android-sdk-linux/cmake/3.6.4111459/bin/cmake --build /home/kaki/Practice/Android/GlApplication/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target native-lib",
    "buildType": "debug",
    "files": [
      {
        "flags": "  --target=armv7-none-linux-androideabi --gcc-toolchain=/home/kaki/sdk/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/kaki/sdk/android-sdk-linux/ndk-bundle/sysroot  -Dnative_lib_EXPORTS -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/include/backward  -isystem /home/kaki/sdk/android-sdk-linux/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=23 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++14 -fexceptions -O0 -fno-limit-debug-info  -fPIC    -c ",
        "src": "/home/kaki/Practice/Android/GlApplication/app/src/main/cpp/native-lib.cpp",
        "workingDirectory": "/home/kaki/Practice/Android/GlApplication/app/.externalNativeBuild/cmake/debug/armeabi-v7a"
      }
    ],
    "output": "/home/kaki/Practice/Android/GlApplication/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so",
    "toolchain": "2304076354519640188"
  }
}

NDK使った開発も compilation_database みたいなものが入って、どんどんベンリになっていくのは嬉しいですね! そんなに開発してないですけど!!

以上です、お疲れ様でした。