[Android] Android cross-compile with ndk-build(c)
Android μμ μ€νμν¬ μ μλ λ°μ΄λ리λ₯Ό μμ±νλ λ°©λ²μ μ¬λ¬κ°μ§κ° μμ΅λλ€.
Android 곡μ νμμ§μμλ ndkλ₯Ό μ΄μ©ν λΉλ λ°©λ²μ 3κ°μ§ μκ°ν©λλ€.
NDKλ‘ μ½λλ₯Ό λΉλνλ λ°©λ²μ ν¬κ² μΈ κ°μ§κ° μμ΅λλ€.
- Make κΈ°λ°Β ndk-build
- CMake
- λ 립 μ€νν λꡬ λͺ¨μ(λ€λ₯Έ λΉλ μμ€ν κ³Ό ν΅ν©νκ±°λΒ
configure
Β κΈ°λ° νλ‘μ νΈμ ν¨κ» μ¬μ©)
β κ°μΈμ μΌλ‘ c/c++ μ½λλ₯Ό λΉλνλ λ°©λ²μ€ ndk-buildλ₯Ό μ΄μ©ν λ°©λ²μ΄ κ°μ₯ μ¬μλ³΄μ¬ μ 리ν΄λ³΄κ³ μ ν©λλ€.
βπ» What is NDK-build
ndk-buildλ ndkλ₯Ό μ΄μ©νμ¬ μλλ‘μ΄λλ₯Ό targetμΌλ‘ λΉλλ₯Ό μ§νν μ μλλ‘ λλ Toolμ
λλ€.
μλλ‘μ΄λ 곡μνμ΄μ§μμλ λ€μκ³Ό κ°μ΄ μ μνκ³ μμ΅λλ€.
ndk-build
Β μ€ν¬λ¦½νΈλ NDKμ Make κΈ°λ° λΉλ μμ€ν μ μ¬μ©νλ νλ‘μ νΈλ₯Ό λΉλν©λλ€.
μ¦, ndk-buildλ c/c++ νλ‘μ νΈλ₯Ό μλλ‘μ΄λ μ± μ μμ μ¬μ©νκΈ° μν λΉλ μ€ν¬λ¦½νΈλΌκ³ λ³Ό μ μμ΅λλ€.μ΄λ¬ν ndk-build μ€ν¬λ¦½νΈλ ndkλ₯Ό λ€μ΄λ°κ²λλ©΄ μ¬μ©ν μ μμ΅λλ€.
μλλ‘μ΄λμμ μ§μ μ μΌλ‘ ndk-buildλ₯Ό MakeκΈ°λ°μ΄λΌκ³ μ€λͺ
νκ³ μμ΅λλ€.
μλλ ndk-buildκ° μ€νλ λ μ€νλλ λͺ
λ Ήμ΄ setμ
λλ€.
$GNUMAKE -f <ndk>/build/core/build-local.mk
<parameters>
μ΄λ¬ν μ±μ§λλ¬ΈμμΈμ§ make cleanκ³Ό μ μ¬νκ² λΉλλ₯Ό cleanν μ μλ λͺ
λ Ήμ΄λ μ΄μ©μ΄ κ°λ₯ν©λλ€.
ndk-build clean
βπ» How to use?
ndk-buildλ₯Ό μ¬μ©νκΈ° μν΄ νμν νμΌμ λ€μκ³Ό κ°μ΅λλ€.
- jni
- Android.mk
- Application.mk
hello.cλ₯Ό μ»΄νμΌνλ κ³Όμ μΌλ‘ μλ₯Ό λ€μ΄λ³΄κ³ μ ν©λλ€.
$ tree . ββ―
.
βββ jni
βββ Android.mk
βββ Application.mk
βββ hello.c
ν΄λ ꡬμ±μ μμ κ°μ΄ jniν΄λλ₯Ό μμ±νκ³ , νμ ν΄λμ λΉλνκ³ μΆμ μμ€μ½λ νμΌ , λΉλ μμ±μ μ§μ ν μ μλ Android.mk, Application.mkλ₯Ό λ§λ€μ΄μ£Όλ©΄ κΈ°λ³Έμ μΈ ν경ꡬμ±μ λμ
λλ€.
μ΄μ κ°κ°μ μ΄λ»κ² ꡬμ±νλμ§ λ³΄κ² μ΅λλ€.
λ¨Όμ Android.mkλ λ€μκ³Ό κ°μ΄ μμ±νμ΅λλ€.
Android.mk
LOCAL_PATH := $(call my-dir)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_EXECUTABLE)%
λ€μμΌλ‘ Application.mk μ
λλ€.
Application.mk
APP_ABI := armeabi-v7a arm64-v8a x86_64
APP_PLATFORM := android-23
β κ°κ°μ μμ±μ λν΄μλ μΆνμ μ 리νκ² μ΅λλ€.<br>
μ΄μ λΉλλ₯Ό μ§ννλ©΄ λ©λλ€.
λΉλλ jniκ° μ‘΄μ¬νλ κ·Έλ¦¬κ³ , Android.mkμ Application.mkκ° μ‘΄μ¬νλ μμν΄λμμ μ§ννλ©΄ λ©λλ€.
ndk-build or /path/to/ndk-build
μμ κ°μ΄ ndk-build μ€ν¬λ¦½νΈλ₯Ό μ€ννλ©΄ λ€μμ κ²°κ³Όλ₯Ό λ³Ό μ μμ΅λλ€.
[armeabi-v7a] Compile thumb : hello <= hello.c
[armeabi-v7a] Executable : hello
[armeabi-v7a] Install : hello => libs/armeabi-v7a/hello
[arm64-v8a] Compile : hello <= hello.c
[arm64-v8a] Executable : hello
[arm64-v8a] Install : hello => libs/arm64-v8a/hello
[x86_64] Compile : hello <= hello.c
[x86_64] Executable : hello
[x86_64] Install : hello => libs/x86_64/hello
βπ» κ²°λ‘
λΉλκ° μλ£λμμ΅λλ€.
μ΄μ λΉλκ²°κ³Όλ₯Ό νμΈν΄λ³΄κ² μ΅λλ€.
β λΉλλ₯Ό μ§ννλ©΄ `obj` νμΌκ³Ό `libs` νμΌμ΄ μμ±λ©λλ€. μ΄λ, λ°μ΄λ리 μ€ννμΌμ κ²½μ° `obj` ν΄λ μλ μμ±λ©λλ€.
μμμ μ§μ ν΄μ€λλ‘ arm64-v8a
, armeabi-v7a
, x86_64
ν΄λ μλ λ°μ΄λλ¦¬κ° μμλλ‘ μμ±λμμ΅λλ€.
μμμλ cμ½λλ₯Ό λΉλνμ§λ§, cppμ½λλ λΉλκ° κ°λ₯ν©λλ€.
ndk-build μ€ν¬λ¦½νΈ μ€ν νλ²μ ν΅ν΄ μνλ μν€ν
μ²μ μ€ννμΌμ μμ±ν μ μλ€λ μ μ΄ ν° λ§€λ ₯μ
λλ€.
cpp μ½λ λΉλ κ³Όμ μ κ²½μ°μλ μ€ν¬κ° λ μ μκΈ° λλ¬Έμ λ°λ‘ λΈλ‘κ·Έ λ§ν¬ μΆκ°ν©λλ€.
μμ€μ½λ : github
cpp ex : cpp code
Leave a comment