>백엔드 개발 >C++ >Android Gradle의 ndk {} DSL 내에서 LOCAL_SRC_FILES를 정의할 수 있나요?

Android Gradle의 ndk {} DSL 내에서 LOCAL_SRC_FILES를 정의할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-10 21:19:14246검색

Can I Define LOCAL_SRC_FILES within the ndk {} DSL in Android Gradle?

ndk {} DSL에서 LOCAL_SRC_FILES를 정의할 수 있나요?

gradle.build의 ndk {} DSL 블록 내에서 LOCAL_SRC_FILES를 정의해야 할 수도 있습니다. 네이티브 코드가 포함된 Android Studio 프로젝트로 작업할 때 파일입니다. 이는 현재 Gradle 플러그인에서 기본적으로 지원되지 않지만 유사한 기능을 달성하기 위한 여러 접근 방식이 있습니다.

이전 접근 방식 사용

이전 버전의 Gradle에서는 원치 않는 플러그인을 제외하여 이 문제를 해결할 수 있습니다. 빌드 프로세스의 소스 파일. 그러나 이 접근 방식을 사용하려면 일반 NDK 빌드 작업을 비활성화하고 사용자 정의 작업을 정의해야 했습니다.

실험적 플러그인 사용

Gradle의 실험적 플러그인(com.android.tools.build:gradle- 실험적:0.4.0) 이제 패턴을 기반으로 NDK 빌드에서 파일을 제외할 수 있습니다. 이렇게 하려면 다음 구문을 사용하세요.

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

이렇게 하면 NDK 빌드에서 Android를 대상으로 하는 동안 다른 플랫폼(예: iOS, WinRT)용 파일과 같은 특정 파일을 제외할 수 있습니다.

디버깅을 위한 해결 방법

디버깅 가능한 설정이 필요한 경우 해결 방법에는 ndk-build를 사용하여 정적 라이브러리를 구축하고 필요한 기호를 제공하기 위해 필요한 개체와 연결합니다. 이 접근 방식을 사용하려면 기본 소스를 플랫폼별 파일과 플랫폼 독립적인 파일로 분할해야 합니다.

build.gradle 파일에서:

task buildStaticLib(type: Exec, description: 'Compile Static lib via NDK') {
    commandLine "$ndkBuild", "$staticLibPath", "NDK_PROJECT_PATH=~/srcs", "NDK_OUT=$ndkOut", "APP_ABI=$appAbi", "APP_STL=gnustl_static"
}

tasks.all {
    task ->
        if (task.name.startsWith('link')) {
            task.dependsOn buildStaticLib
        }
}

model {
    android.ndk {
        moduleName = "hello-jni"
        abiFilters += "$appAbi".toString()
        ldFlags += "$staticLib".toString()
        ldLibs += "log"
        cppFlags += "-std=c++11"
    }

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

~/srcs/Android.mk에서:

LOCAL_PATH := $(call my-dir)/..

include $(CLEAR_VARS)

LOCAL_MODULE    := staticLib
LOCAL_SRC_FILES := HelloJni.cpp

LOCAL_CPPFLAGS += -std=c++11

include $(BUILD_STATIC_LIBRARY)

대체 접근 방식

또는 외부 도구 사용을 고려할 수 있습니다. CMake 또는 Buck과 같은 도구를 사용하여 네이티브 코드 빌드 프로세스를 관리하고 이를 Gradle과 통합할 수 있습니다. 이 접근 방식은 컴파일 및 연결 프로세스에 대한 더 많은 유연성과 제어 기능을 제공합니다.

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

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