Environment:
Windows 10 Pro 64-bit (also tested on Windows 7 64-bit with the same results)
Android Studio 2.3.1 (build 162.3871768)
Gradle plugin 2.3.1 (Gradle 3.3)
I created a new project with C++ in Android studio, then replaced all the cmake stuff with ndkBuild, i.e:
externalNativeBuild {
ndkBuild {
abiFilters "armeabi-v7a"
arguments "APP_STL:=gnustl_static"
cppFlags "-std=c++11","-frtti","-fexceptions"
}
}
externalNativeBuild {
ndkBuild {
path "Android.mk"
}
}
Android.mk contents:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := src/main/cpp/native-lib.cpp
include $(BUILD_SHARED_LIBRARY)
$(info Building goal $(MAKECMDGOALS) with local_installed $(LOCAL_INSTALLED))
This gives me the following ndkBuild_build_output.txt in .externalNativeBuild/ndkBuild/debug/armeabi-v7a after the Gradle sync:
Building goal with local_installed C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/libnative-lib.so
md "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib\armeabi-v7a" >NUL 2>NUL || rem
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [armeabi-v7a] "Gdbserver ": "[arm-linux-androideabi] C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/gdbserver"
copy /b/y "C:\Android\android-sdk\ndk-bundle\build\\..\prebuilt\android-arm\gdbserver\gdbserver" "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib\armeabi-v7a\gdbserver" > NUL
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [armeabi-v7a] "Gdbsetup ": "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/gdb.setup"
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "set solib-search-path C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a" > C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/gdb.setup
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe "directory C:/Android/android-sdk/ndk-bundle/build//../platforms/android-21/arch-arm C:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++ C:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/include C:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include C:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/include/backward C:/Android/apps/NdkBuildTest/app" >> C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/gdb.setup
md "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\obj\local\armeabi-v7a\objs-debug\native-lib\src\main\cpp" >NUL 2>NUL || rem
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [armeabi-v7a] "Compile++ thumb": "native-lib <= native-lib.cpp"
C:/Android/android-sdk/ndk-bundle/build//../toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe -MMD -MP -MF C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/native-lib/src/main/cpp/native-lib.o.d -gcc-toolchain C:/Android/android-sdk/ndk-bundle/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 -fpic -ffunction-sections -funwind-tables -fstack-protector-strong -Wno-invalid-command-line-argument -Wno-unused-command-line-argument -no-canonical-prefixes -fno-integrated-as -g -target armv7-none-linux-androideabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-exceptions -fno-rtti -mthumb -O0 -UNDEBUG -fno-limit-debug-info -IC:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/include -IC:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include -IC:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/include/backward -IC:/Android/apps/NdkBuildTest/app -DANDROID -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -frtti -fexceptions --sysroot C:/Android/android-sdk/ndk-bundle/build//../platforms/android-21/arch-arm -c C:/Android/apps/NdkBuildTest/app/src/main/cpp/native-lib.cpp -o C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/native-lib/src/main/cpp/native-lib.o
md "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\obj\local\armeabi-v7a" >NUL 2>NUL || rem
md "C:\Android\android-sdk\ndk-bundle\build\\..\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a" >NUL 2>NUL || rem
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [armeabi-v7a] "SharedLibrary ": "libnative-lib.so"
C:/Android/android-sdk/ndk-bundle/build//../toolchains/llvm/prebuilt/windows-x86_64/bin/clang++.exe -Wl,-soname,libnative-lib.so -shared --sysroot=C:/Android/android-sdk/ndk-bundle/build//../platforms/android-21/arch-arm C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/native-lib/src/main/cpp/native-lib.o C:/Android/android-sdk/ndk-bundle/build//../sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a -lgcc -gcc-toolchain C:/Android/android-sdk/ndk-bundle/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64 -no-canonical-prefixes -target armv7-none-linux-androideabi -Wl,--fix-cortex-a8 -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings -lc -lm -o C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libnative-lib.so
C:/Android/android-sdk/ndk-bundle/build//../prebuilt/windows-x86_64/bin/echo.exe [armeabi-v7a] "Install ": "libnative-lib.so => C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/libnative-lib.so"
copy /b/y "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\obj\local\armeabi-v7a\libnative-lib.so" "C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib\armeabi-v7a\libnative-lib.so" > NUL
C:/Android/android-sdk/ndk-bundle/build//../toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-strip --strip-unneeded C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/libnative-lib.so
And the following output in the Gradle console when doing Make Project:
:app:externalNativeBuildDebug
Build native-lib armeabi-v7a
Building goal C:/Android/apps/NdkBuildTest/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libnative-lib.so with local_installed C:\Android\apps\NdkBuildTest\app\build\intermediates\ndkBuild\debug\lib/armeabi-v7a/libnative-lib.so
[armeabi-v7a] Compile++ thumb: native-lib <= native-lib.cpp
[armeabi-v7a] SharedLibrary : libnative-lib.so
:app:compileDebugSources
..looking for any resulting .so files:
$ find . -name *.so
./app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/libnative-lib.so
It's as if the native build stops right before the "Install" phase. Is this a bug, or the expected behavior? If it's the expected behavior, how do I get the behavior I want (i.e. that install/strip is performed when I make/rebuild my project from the IDE or assemble from the command line)?
Note that even an explicit host-cp of $(LOCAL_BUILT_MODULE) in the makefile doesn't appear to do anything (while it used to work fine when I was building with Ant).
/Michael