[Native] Enable real Android Native executables #4624
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As discussed in https://youtrack.jetbrains.com/issue/KT-49144 , this PR enables Android Native executable { } binaries to be actual executables. This is especially important for tests.
Context
Android Native executables are currently built as shared libraries with a
Konan_main
entry point, whose signature is specific to Android NDK types ( https://developer.android.com/ndk/reference/group/native-activity#anativeactivity_createfunc ). It can't be executed from command line of course. This PR preserves the current behavior, but adds:AndroidProgramType.Standalone
(desired long-term default) orAndroidProgramType.NativeActivity
(current behavior). When standalone is used, we'll build a real command-line executable.Konan_main_standalone
function in the Android runtime, to be used for real executables. Ideally this should be called Konan_main and we should rename the NDK-based entry point, but that would be a breaking change.I have verified that both behaviors (standalone vs. nativeActivity) work as expected.