Conversation

The build system needs to be setting the minimum API level so that the code isn't built to use symbols introduced in newer versions. I don't think this actually has to do with that old minor SDK issue but rather this is the canary in the coal mine breaking from having that issue.
1
I'm upgrading NDK-- if it's ok I'd like to check back if I upgrade and it's still not working. (It is *super* interesting to me tho this problem was not present when I was building the project as Gradle invoking CMake, but when I build the project with pure CMake it appears!)
1
Make sure the build system is setting __ANDROID_API__ to your minSdkVersion i.e. -D__ANDROID_API__=21 for how you have it set up. I think that's probably your actual problem rather than an SDK / NDK bug now that I actually think about it more.
1
That makes sense, but that wouldn't explain why add_subdirectory was "passing" the correct variables when invoking add_subdirectory on ode (so appears to have loaded without problems) but not when invoking add_subdirectory on puredata (so having problems).
1
The issue is almost certainly that the build system is supposed to be passing -D__ANDROID_API__=21 to communicate that minSdkVersion is 21 but it's passing something else instead. If you set it to that by hand, the problem would go away, but you should figure out what's wrong.
2
I only really deal with the proper Android build system used by AOSP. I don't have to deal with all the broken external stuff for app developers. I have no clue how to use gradle, CMake, etc. and it's super painful when I try to deal with those. So, can't really help with that.
1