android.mk 예제

이 Android.mk 파일을 구문 분석할 때 빌드 시스템이 대상으로 하는 Android API 수준 번호입니다. 예를 들어, 안드로이드 5.1 시스템 이미지는 안드로이드 API 레벨 22에 해당합니다: android-22. 플랫폼 이름 및 해당 Android 시스템 이미지의 전체 목록은 Android NDK 네이티브 API를 참조하십시오. 다음 예제에서는 이 변수를 사용하기 위한 구문을 보여 주며, 라이브러리 패키징 외에도 빌드 시스템에서는 다양한 다른 세부 정보를 처리합니다. 예를 들어 헤더 파일이나 생성된 파일 간에 대한 명시적 종속성을 나열할 필요가 Android.mk. NDK 빌드 시스템은 이러한 관계를 자동으로 계산합니다. 따라서 Android.mk 파일을 건드리지 않고도 향후 NDK 릴리스에서 새로운 툴체인/플랫폼 지원의 이점을 누릴 수 있어야 합니다. jni 폴더는 Android 응용 프로그램 프로젝트에서 JNI 네이티브 프로젝트에 더 적합합니다. 프로젝트에 더 의미 있는 것을 원한다면 기본적으로 ndk-build에서 사용하는 특정 폴더를 제거할 수 있습니다. 이를 달성하기 위해, makefiles의 몇 가지 변수를 적절하게 설정해야합니다.

다음 단계는 이러한 목표를 달성할 것입니다. 전체 예제 프로젝트는 예제 3에서 찾을 수 있습니다. 간단한 예제(예 5)를 살펴보고 어떻게 작동하는지 살펴보겠습니다. 이 예제에는 매우 간단한 메이크 파일이 포함되어 있습니다. “include”의 힘으로, 나는 그 프로젝트가 얼마나 복잡한지에 관계없이 거의 모든 프로젝트에 대해 거의 모든 것을 할 수있는 훨씬 더 복잡한 건물 스크립트를 만들 수 있다고 확신합니다. 대상 안드로이드 API 수준과 ABI의 연결. 실제 장치에 대한 특정 대상 시스템 이미지에 대해 테스트하려는 경우 특히 유용합니다. 예를 들어 Android API 수준 22에서 실행 중인 64비트 ARM 장치를 확인하려면 마지막으로 빌드 시스템은 로컬로 빌드할 때 내보낸 플래그를 사용하지 않습니다(즉, 내보내는 플래그가 있는 모듈을 빌드).

따라서 위의 예제에서는 foo/foo.c를 빌드할 때 컴파일러에 -DFOO=1을 전달하지 않습니다. 로컬로 빌드하려면 대신 LOCAL_CFLAGS를 사용합니다. 이 매크로는 일반적으로 현재 Android.mk의 디렉토리인 마지막으로 포함된 메이크파일의 경로를 반환합니다. my-dir은 Android.mk 파일의 시작 부분에 LOCAL_PATH를 정의하는 데 유용합니다. 예를 들어, 나는 이것이 왜 사소한지 보여주기 위해 내가 만난 매우 실용적인 문제를 예로 사용할 것이다. 내가 만난 문제는 OpenCL 가속 네이티브 코드가있는 Android 응용 프로그램을 개발하는 동안이었습니다. (OpenCL을 모르는 사람들을 위해: OpenCL은 크로노스 그룹이 관리하는 이기종 컴퓨팅을 위한 개방형 사양입니다. 최신 데스크탑 CPU, GPU 및 최신 세대 모바일 GPU의 대부분은 OpenCL을 지원하므로 OpenCL을 사용하여 OpenCL의 성능을 활용할 수 있습니다. 알고리즘을 가속화하는 GPU의 병렬 아키텍처입니다.).

OpenCL이 작동하는 방식은 SoC 칩 공급업체가 공유 라이브러리의 드라이버, 컴파일러를 포함한 OpenCL 소프트웨어 스택을 구현하는 것입니다. 여기서 문제는 다른 공급업체에서 제공하는 응용 프로그램 SoC 칩셋이 있는 다른 장치의 경우 일반적으로 /system/vendor/lib 또는 /system/와 같은 디렉터리에 있는 공유 라이브러리인 드라이버 라이브러리에서 OpenCL 지원을 사용할 수 있다는 것입니다. lib 또는 일부 다른 디렉토리를 참조하십시오.