2012-11-30 2 views
4

하나의 클래스와 작은 C + + 라이브러리 프로젝트가 있습니다. 어떻게 안드로이드 NDK를 통해 C + + 프로젝트를 컴파일

class Test 
{ 
public: 
Test(){}; 
~Test(){}; 
int SomeFunc() { return 5; } 
} 

나는 안드로이드 NDK를 통해이 클래스를 구축 할 수 있습니다. (질문 1). .so 파일을 Java 응용 프로그램에 사용할 수 있습니다. Java 코드에서 SomeFunc 메서드를 호출하는 방법 (질문 2).

답변

0

질문을 올바르게 이해할 수 있는지 잘 모르겠다. this link could be useful to you. 개인적으로 매우 기본적인 것을 제외하고는 C에 대해 많이 알지 못하지만, NDK로 C를 더 많이 사용하기를 기대합니다. 당신은 C로 작성 무엇이든간에 코드

0

당신은 u는 첫째 공공 네이티브 INT ABC() 같은 자바 클래스의 네이티브 메소드를 작성해야이 코드를 사용하기 전에 다음 java_urpackagename_class_methodname처럼 정의해야합니다;에서이 메소드를 사용할 것이라고 말하면됩니다. 사용하려면 Android.mk 또는 Application.mk를 필요에 따라 만드십시오. .so는 자바 클래스가 C 코드가 원하는 것을 알 수 있도록 도와 줄 것이다.

1) 프로젝트의 "JNI"폴더에 Android.mk를 만듭니다 :

LOCAL_PATH:= $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := main_jni 
LOCAL_CFLAGS := 
LOCAL_SRC_FILES := main.cpp 
LOCAL_LDLIBS := 

include $(BUILD_SHARED_LIBRARY) 

2)는 "JNI"폴더에 MAIN.CPP 만들기 :

을 여기
8

는 단계입니다

:
#include <jni.h> 
using namespace std; 

#ifdef __cplusplus 
extern "C" { 
#endif 

class Test { 
public: 
Test(){}; 
~Test(){}; 
int SomeFunc() { return 5; } 
}; 

jint Java_com_example_activity_MainActivity_SomeFunc(JNIEnv *env, jobject thiz) 
{ 
    Test *test = new Test(); 
    return test->SomeFunc(); 
} 

#ifdef __cplusplus 
} 
#endif 

3) 귀하의 호출 활동이 예에서는 (MainActivity.java)에서 라이브러리를로드하는 호출을 추가

4. ) 호출 활동의 기본 기능을 정의합니다

native int SomeFunc(); 

5) 활동에서 전화 :

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView text = (TextView) this.findViewById(R.id.text); 

    text.setText(String.valueOf(SomeFunc())); 
} 

6)은 "NDK 빌드"명령을 실행 프로젝트의 루트 폴더에서 :

7) 재 빌드 (참고이 단계 이후 이클립스에서 프로젝트를 새로 고침) 및

+0

'NDK-build'은 '아무튼 응용 프로그램을 실행 cpp 코드에서 컴파일러 오류를 선택하지 마십시오. –

관련 문제