>  기사  >  백엔드 개발  >  NDK DSL에서 LOCAL_SRC_FILES를 정의할 수 있나요?

NDK DSL에서 LOCAL_SRC_FILES를 정의할 수 있나요?

DDD
DDD원래의
2024-11-23 09:55:17289검색

Can I define LOCAL_SRC_FILES in NDK DSL?

NDK DSL에서 LOCAL_SRC_FILES를 정의할 수 있나요?

Gradle ndk{} 블록에서 LOCAL_SRC_FILES를 정의하려면 이 기능이 지원되지 않는다는 점에 유의하는 것이 중요합니다. 현재 Gradle 플러그인. "실험용" 플러그인도 디렉토리 추가만 허용합니다.

권장 접근 방식

이 작업을 안정적으로 수행하려면 기존 Android.mk를 사용하는 것이 좋습니다. 또한, jni.srcDirs를 [${jniSrc}]로 남겨두면 Android Studio에서 쉽게 액세스하고 구문 강조 표시를 위해 이러한 파일을 표시할 수 있습니다.

NDK 빌드 비활성화

기존 Android의 경우. mk 접근 방식은 바람직하지 않습니다. 일반 NDK 빌드 작업을 비활성화하고 buildNative 작업을 삽입할 수 있습니다. 대신:

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
}

Gradle Experimental Plugin

'com.android.tools.build:gradle-experimental:0.2.0' 플러그인의 경우 비슷한 접근 방식을 취할 수 있지만 다른 작업 일치:

tasks.all {
    task ->
        if (task.name.startsWith('compile') && task.name.contains('MainC')) {
            task.enabled = false
        }
        if (task.name.startsWith('link')) {
            task.enabled = false
        }
        if (task.name.endsWith("SharedLibrary") ) {
            task.dependsOn buildNative
        }
}

NDK에서 파일 제외 빌드

실험용 플러그인 0.4.0을 사용하면 다음 패턴에 따라 NDK 빌드에서 파일을 제외할 수 있습니다.

android.sources {
    main {
       jni.source {
            srcDirs = ["~/srcs/jni"]
            exclude "**/win.cpp"
        }
    }
}

위 내용은 NDK DSL에서 LOCAL_SRC_FILES를 정의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.