티스토리 뷰
728x90
출처
- NDK 10 - Android Rebuilds
- Google Developers Korea Blog: Google Developers Korea Blog: 안드로이드 NDK (Native Development Kit) r14 를 소개합니다.
Python 설치
$ sudo apt install python
Android NDK(C/C++) 다운로드, 압축 해제
$ wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip $ sudo mv android-ndk-r16b-linux-x86_64.zip /opt/ $ cd /opt/ $ sudo unzip android-ndk-r16b-linux-x86_64.zip
NDK 경로 path에 추가
$ echo 'export ANDROID_NDK_ROOT=/opt/android-ndk-r16b' | tee -a ~/.bashrc $ echo 'export PATH=$PATH:$ANDROID_NDK_ROOT' | tee -a ~/.bashrc
.profile-ndk 파일 작성
$ vi ~/.profile_ndk
.profile-ndk 내용
export ANDROID_NDK_ROOT=/opt/android-ndk-r16b export NDK_TOOLCHAIN_VERSION=4.7 export TOOLCHAIN=/opt/android-14-toolchain export PATH=$TOOLCHAIN/bin:$PATH
.profile-ndk 실행 (NDK 빌드시 사용)
$ chmod a+x ~/.profile_ndk $ source ~/.profile_ndk
toolchain 설치
$ sudo $ANDROID_NDK_ROOT/build/tools/make-standalone-toolchain.sh \ --verbose \ --toolchain=arm-linux-androideabi-4.7 \ --install-dir=$TOOLCHAIN \ --platform=android-14 HOST_OS=linux HOST_EXE= HOST_ARCH=x86_64 HOST_TAG=linux-x86_64 HOST_NUM_CPUS=8 BUILD_NUM_CPUS=16 Auto-config: --arch=arm ## COMMAND: python /opt/android-ndk-r16b/build/tools/make_standalone_toolchain.py --arch arm --api 14 --stl gnustl --install-dir=/opt/android-14-toolchain Toolchain installed to /opt/android-14-toolchain.
toolchain 환경설정
$ echo 'export TOOLCHAIN=/opt/android-14-toolchain' | tee -a ~/.bashrc $ echo 'export PATH=$TOOLCHAIN/bin:$PATH' | tee -a ~/.bashrc $ echo 'export CC=arm-linux-androideabi-gcc' | tee -a ~/.bashrc
예제
Android.mk
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY)
hello-jni.c
#include <string.h> #include <jni.h> JNIEXPORT jstring JNICALL Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) { #if defined(__arm__) #if defined(__ARM_ARCH_7A__) #if defined(__ARM_NEON__) #if defined(__ARM_PCS_VFP) #define ABI "armeabi-v7a/NEON (hard-float)" #else #define ABI "armeabi-v7a/NEON" #endif #else #if defined(__ARM_PCS_VFP) #define ABI "armeabi-v7a (hard-float)" #else #define ABI "armeabi-v7a" #endif #endif #else #define ABI "armeabi" #endif #elif defined(__i386__) #define ABI "x86" #elif defined(__x86_64__) #define ABI "x86_64" #elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */ #define ABI "mips64" #elif defined(__mips__) #define ABI "mips" #elif defined(__aarch64__) #define ABI "arm64-v8a" #else #define ABI "unknown" #endif return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI "."); }
컴파일
$ ndk-build NDK_PROJECT_PATH=`pwd` APP_BUILD_SCRIPT=Android.mk Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-14. [arm64-v8a] Compile : hello-jni <= hello-jni.c [arm64-v8a] SharedLibrary : libhello-jni.so [arm64-v8a] Install : libhello-jni.so => libs/arm64-v8a/libhello-jni.so [armeabi-v7a] Compile thumb : hello-jni <= hello-jni.c [armeabi-v7a] SharedLibrary : libhello-jni.so [armeabi-v7a] Install : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so [x86] Compile : hello-jni <= hello-jni.c [x86] SharedLibrary : libhello-jni.so [x86] Install : libhello-jni.so => libs/x86/libhello-jni.so [x86_64] Compile : hello-jni <= hello-jni.c [x86_64] SharedLibrary : libhello-jni.so [x86_64] Install : libhello-jni.so => libs/x86_64/libhello-jni.so
Java 사용 예제
package com.example.hellojni; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class HelloJni extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_hello_jni); TextView tv = (TextView)findViewById(R.id.hello_textview); tv.setText( stringFromJNI() ); } public native String stringFromJNI(); public native String unimplementedStringFromJNI(); static { System.loadLibrary("hello-jni"); } }
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- ubuntu
- SAS
- Delphi
- Java
- MySQL
- Xcode
- BPI-M4
- 동경
- Spring MVC
- ble
- flex
- sas2009
- android
- JavaScript
- 튜닝쇼 2008
- Linux
- Delphi Tip
- Mac
- 송주경
- koba2010
- 전예희
- ffmpeg
- 지스타2007
- KOBA
- 일본여행
- 서울오토살롱
- 레이싱모델 익스트림 포토 페스티벌
- Spring
- NDK
- oracle
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함