Conversation

You probably just need to set --target=aarch64-none-linux-android21 rather than --target=aarch64-none-linux-android26. It's the minSdkVersion that needs to be set at compile time for __ANDROID_API__ rather than the targetSdkVersion which is checked at runtime.
1
So, I believe what is controlling this is -D ANDROID_NATIVE_API_LEVEL=26 , which is being passed to CMake (not clang) and is most likely being interpreted by the CMake toolchain file (script). Problem: If I set this to 21, I get this legitimate-looking error:
Image
1
I guess part of the problem is gradle/AndroidManifest.xml refer to these three things as minSdkVersion/targetSdkVersion/compileSdkVersion, CLANG refers to them as __ANDROID__API__/__ANDROID_API_FUTURE__/?, and CMake refers to them as ANDROID_NATIVE_API_LEVEL/?/?
2
ANDROID_NATIVE_API_LEVEL seems to be for minSdkVersion since minSdkVersion is the only one that's truly fixed at compile time. targetSdkVersion is essentially the max supported API level semantics, so if you have targetSdkVersion 30 and it's Android 10 then it's 29 at runtime.
1
Do you know what compileSdkVersion means in practice? If that determines the java toolchain you get when building with gradle-controlling-CMake, but I am getting the minSdkVersion java toolchain when using Cmake directly, that might explain the discrepancy
1
compileSdkVersion 30 should pretty much just work. targetSdkVersion 30 requires supporting the latest restrictions, changes, etc. for newer API levels while still having code to support the older API levels you support so that actually involves work and runtime code decisions.
1
Show replies