수색…


Android 용 기본 실행 파일 만들기

project / jni / main.c

#include <stdio.h>
#include <unistd.h>

int main(void) {
  printf("Hello world!\n");
  return 0;
}

project / jni / Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE    := hello_world
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)

프로젝트 / jni / Application.mk

APP_ABI := all
APP_PLATFORM := android-21

5.0보다 낮은 Android 버전 (API 21)을 실행하는 기기를 지원하려면 APP_PLATFORM 을 이전 API (예 : android-8 설정하여 이진 파일을 컴파일해야합니다. 이것은 안드로이드 5.0이 PIE ( Position Independent Binaries)를 시행 한 결과 인 반면 구형 디바이스는 반드시 PIE를 지원하지 않습니다. 따라서 장치 버전에 따라 PIE 또는 비 PIE 중 하나를 사용해야합니다. Android 애플리케이션에서 바이너리를 사용하려면 API 레벨을 확인하고 올바른 바이너리를 추출해야합니다.

APP_ABIarmeabi 와 같은 특정 플랫폼으로 변경하여 해당 아키텍처의 바이너리 만 빌드 할 수 있습니다.

최악의 경우, 각 아키텍처 (ndk-r10e를 사용하는 약 14 개의 서로 다른 바이너리)에 대해 PIE 및 비 PIE 바이너리를 모두 갖게됩니다.

실행 파일을 빌드하려면 다음을 수행하십시오.

cd project
ndk-build

바이너리는 project/libs/<architecture>/hello_world 에서 찾을 수 있습니다. ADB (실행 권한으로 pushchmod ) 또는 응용 프로그램 (실행 권한으로 추출 및 chmod )에서 사용할 수 있습니다.

CPU의 구조를 확인하려면 빌드 속성 검색 ro.product.cpu.abi 기본 구조 나에 대한 ro.product.cpu.abilist 지원 아키텍처의 전체 목록 (새로운 장치를). 응용 프로그램 내에서 android.os.Build 클래스를 사용하거나 ADB를 통해 getprop <name> 을 사용하여이 작업을 수행 할 수 있습니다.

빌드를 정리하는 방법

빌드를 정리해야하는 경우 :

ndk-build clean

Android.mk 이외의 메이크 파일을 사용하는 방법

ndk-build NDK_PROJECT_PATH = PROJECT_PATH APP_BUILD_SCRIPT = MyAndroid.mk

ndk에 로그인하는 방법

먼저 Android.mk 파일의 로깅 라이브러리에 링크해야합니다.

LOCAL_LDLIBS := -llog   

그런 다음 __android_log_print() 호출 중 하나를 사용하십시오.

#include <android/log.h>    
#define TAG "MY LOG"

__android_log_print(ANDROID_LOG_VERBOSE,    TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_WARN,       TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_DEBUG,      TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_INFO,       TAG, "The value of 1 + 1 is %d", 1 + 1)
__android_log_print(ANDROID_LOG_ERROR,      TAG, "The value of 1 + 1 is %d", 1 + 1)

또는 해당 매크로를 정의하여보다 편리하게 사용할 수 있습니다.

#define  LOGV(...)  __android_log_print(ANDROID_LOG_VERBOSE,    TAG, __VA_ARGS__)
#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,       TAG, __VA_ARGS__)
#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,      TAG, __VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,       TAG, __VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,      TAG, __VA_ARGS__)

:

int x = 42;
LOGD("The value of x is %d", x);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow