Android NDK 개발 환경 구축 및 간단 한 예시

1.NDK 와 JNI 소개
NDK 는 모두 native development kit 로 컬 언어(C&C++)개발 패키지 라 고 합 니 다.이에 대응 하 는 것 은 자주 접 하 는 Android-SDK,(software development kit)소프트웨어 개발 패키지(자바 언어 개발 만 지원)다.
쉽게 말 해 NDK 를 활용 하면 순수 C&C++의 코드 를 개발 한 뒤 라 이브 러 리 로 컴 파일 해 안 드 로 이 드-SDK 를 이용 해 개발 한 자바 프로그램 을 호출 할 수 있다.NDK 가 개발 한 것 은 하부 개발 또는 jni(java native interface)층 개발 이 라 고 할 수 있 으 며 SDK 개발 은 상부 개발 이 라 고 할 수 있다.
Android 개발 에서 NDK 를 사용 하 는 이유:
1.알다 시 피 SDK 로 작 성 된 코드 를 이용 하여 생 성 된 APK 는 쉽게 역 컴 파일 할 수 있 습 니 다.안전성 이 매우 높 지 않 고 NDK 로 개 발 된 라 이브 러 리 는 역 컴 파일 되 기 쉽 지 않 으 며 기밀 성,안전성 이 모두 향상 되 었 습 니 다.
2.많은 오픈 소스 프로젝트 와 대형 프로젝트 는 C&C+코드 로 순수한 자바 언어 로 전환 하 는 것 은 불가능 합 니 다.
3.C&C++의 코드 운행 속도 와 효율 은 자바 보다 훨씬 빠르다.
JNI 는 모두 자바 네 이 티 브 인터페이스(JAVA 로 컬 호출)라 고 부른다.자바 1.1 부터 JNI 는 자바 플랫폼 의 일부분 이 되 었 습 니 다.자바 코드 와 다른 언어 로 작 성 된 코드(예 를 들 어 C&C++)가 상호작용 을 할 수 있 습 니 다.안 드 로 이 드 에서 발 표 돼 서 JNI 라 는 개념 을 도입 한 게 아 닙 니 다.
간단하게 말 하면,Android 의 NDK 는 로 컬 언어의 프로그램 을 작성 할 때 사용 할 수 있 는 교차 컴 파일 도구 체인 과 Android 자체 라 이브 러 리 를 제공 합 니 다.NDK 가 제공 하 는 교차 컴 파일 도구 체인 은 이미 작 성 된 C&C+코드 를 컴 파일 하여 라 이브 러 리 를 생 성 합 니 다.물론 NDK 의 도구 와 라 이브 러 리 를 사용 하지 않 고 교차 컴 파일 환경 을 만 들 수 있 습 니 다.그리고 라 이브 러 리 를 생 성 합 니 다.작업 을 규범화 하면 JAVA 층 이 성공 적 으로 호출 할 수 있 는 라 이브 러 리 파일 을 생 성 할 수 있 습 니 다.
2.NDK 환경 구축
최신 NDK 를 사용 하여 cygwin 을 직접 버 립 니 다.예전 에 안 드 로 이 드 프로젝트 를 할 때 NDK 를 사용 하려 면 NDK 를 다운로드 해 야 합 니 다.Cygwin(리 눅 스 환경 을 모 의 하 는)을 다운로드 하고 CDT(Eclipse C/C+개발 플러그 인)를 다운로드 해 야 합 니 다.그리고 컴 파일 러,환경 변 수 를 설정 해 야 합 니 다.특히 귀 찮 습 니 다.새 버 전 은 필요 없습니다.
Android SDK 다운로드http://developer.android.com/sdk/index.html
Android NDK 다운로드http://developer.android.com/tools/sdk/ndk/index.html (비고:NDK 버 전 은 r7 이상 이후 Cygwin 이 통합 되 었 고 매우 간소화 되 었 습 니 다.)
본인 이 사용 하 는 SDK 와 NDK 는

Eclipse 설정
Eclipse 를 열 고 Window->Preferences->Android->NDK 를 누 르 고 NDK 경 로 를 설정 합 니 다.예 를 들 어 저 는 F:android-ndk-r10e 입 니 다.안 드 로 이 드 프로젝트 NDKTest 를 새로 만 듭 니 다.프로젝트 에서 오른쪽 단 추 를 누 르 고 안 드 로 이 드 Tools->Add Native Support...을 클릭 한 다음 에 우리 의.so 파일 에 이름 을 지어 줍 니 다.이 럴 때 프로젝트 에 jni 폴 더 가 하나 더 생 깁 니 다.jni 아래 에는 Android.mk 와 NDKTest.cpp 파일 이 있 습 니 다.Android.mk 는 NDK 프로젝트 의 Makefile 이 고 NDKTest.cpp 는 NDK 의 원본 파일 입 니 다.

다음은 NDKTest.cpp 파일 을 작성 합 니 다.

<span style="font-size:14px;">#include <jni.h>
#include <string.h>
extern C
 
jstring Java_com_example_ndktest_MainActivity_NDKTestFromJNI(JNIEnv* env,
    jobject thiz) {
  return env->NewStringUTF(Hello from JNI !);
}
</string.h></jni.h></span>
MainActivity.java 파일 계속 작성 하기

<span style="font-size:14px;">package com.example.ndktest;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
 
public class MainActivity extends Activity {
 
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    TextView tv = new TextView(this);
    tv.setText(NDKTestFromJNI());
    setContentView(tv);
  }
 
  public native String NDKTestFromJNI();// native  ,        Native 。       native    
 
  static {
    System.loadLibrary(NDKTest);//    ,   lib       
  }
}
</span>
컴 파일 실행,cpp 파일 먼저 컴 파일,프로젝트 NDKTest,Build Project 오른쪽 클릭,성공 결과 libs 디 렉 터 리 에서.so 파일 생 성


그리고 안 드 로 이 드 자바 프로젝트 를 컴 파일 하고 프로젝트 run application 을 오른쪽 클릭 하여 실제 컴퓨터 에 배 치 된 결과 입 니 다.

3.관련 문제
NDK 구축 과 인 스 턴 스 과정 에서 발생 하 는 몇 가지 문 제 는 다음 과 같 습 니 다.
Eclipse 오류"Unresolved inclusion jni.h"
NDK 개발 과정 에서 eclipse 에서 inclusion 을 처리 하지 못 해 symbol 디 스 플레이 오류 가 발생 할 때 가 있 습 니 다.인터넷 에는'Unresolved inclusion jni.h'와 같은 오 류 를 해결 할 수 있 는 방법 이 많 습 니 다.includepath 등 방법 을 포함 하지만 저 에 게 는 도움 이 되 지 않 습 니 다.
최종 해결 방법 은 eclipse 가 이 프로젝트 에 대한 nativesupport 를 초기 화 하 는 것 입 니 다.
1.eclipse 에서 지정 한 Project 닫 기
2.다른 편집 도구 로 이 프로젝트 의.project 파일 을 열 고 다음 내용 을 삭제 합 니 다.
......
org.eclipse.cdt.managedbuilder.core.genmakebuilder
clean,full,incremental,
......
org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder
full,incremental,
......
org.eclipse.cdt.core.cnature
org.eclipse.cdt.core.ccnature
org.eclipse.cdt.managedbuilder.core.managedBuildNature
org.eclipse.cdt.managedbuilder.core.ScannerConfigNature
3..cproject 파일 삭제
4.eclipse 에서 원래 의 procject,refresh 를 열 고 오른쪽 버튼->properties->Android Tools->Add Native Support
5.해결
window 플랫폼 에서 Eclipse Ndk 개발 중인 Method'NewStringUTF'could not be resolved 문제
프로젝트 오른쪽 단추->속성->c/c++일반->Code Analysis,Use procject settings 를 선택 한 방법 은 분석 할 수 없습니다(Method cannot be resolved)선택 을 취소 하고 응용->확인 한 다음 새로 고침,청소,새로 고침,build 프로젝트 를 선택 하 십시오.
jni/hellocpp/main.cpp:16:18:error: base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'
오 류 는:
(*env)->NewStringUTF(env, Hello from JNI !);
이 줄 은 c 의 쓰기 입 니 다.저 는 cpp 프로그램 입 니 다.다음 으로 바 꿔 야 합 니 다.
env->NewStringUTF( Hello from JNI !);
java.lang.UnsatisfiedLinkError:Native method not found
1,c++의 방법 자바xxx_xxx 의 자바 이니셜 은 반드시 대문자 로 써 야 한다.
2.cpp 파일 이 라면 extern C{방법 은 여기 있 습 니 다}.괄호 안에 로 컬 방법 이 있 습 니 다.
 지금까지 안 드 로 이 드 였 습 니 다. NDK 환경 구축 및 예시 코드,정 리 를 한 다음 에 관련 자 료 를 계속 보충 합 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기