Defining LOCAL_SRC_FILES in NDK DSL
The Android NDK DSL allows you to specify native source files for your module. However, in older versions of the DSL, there was no direct way to manually define LOCAL_SRC_FILES.
Experimental Plugin Solution
With the experimental Android Gradle plugin 0.4.0, you can now exclude source files from the NDK build based on patterns. For example:
android.sources { main { jni.source { srcDirs = ["~/srcs/jni"] exclude "**/win.cpp" } } }
Workaround for Older Plugins
Unfortunately, for older versions of the DSL, it is not possible to define LOCAL_SRC_FILES directly. Instead, it is recommended to use the traditional Android.mk file to manage your native source files.
You can disable the default NDK build tasks and inject a custom task to compile your native source files:
def ndkBuild = android.ndkDirectory import org.apache.tools.ant.taskdefs.condition.Os if (Os.isFamily(Os.FAMILY_WINDOWS)) { ndkBuild += '.cmd' } task buildNative(type: Exec, description: 'Compile JNI source via NDK') { commandLine '$ndkBuild', 'NDK_PROJECT_PATH="$jniSrc/..' } task cleanNative(type: Exec, description: 'Clean JNI object files') { commandLine '$ndkBuild', 'clean', 'NDK_PROJECT_PATH="$jniSrc/..' } clean.dependsOn 'cleanNative' tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn buildNative } tasks.all { task -> if (task.name.contains('compileDebugNdk') || task.name.contains('compileReleaseNdk')) task.enabled = false }
Caveats
Note that this workaround may not produce a debuggable setup. To address this, you can build a static library with ndk-build and link it with the necessary objects to pull symbols from the library.
The above is the detailed content of How to Define LOCAL_SRC_FILES in Android NDK DSL?. For more information, please follow other related articles on the PHP Chinese website!