2011-05-15 3 views
0

C++ 클래스를 작성 했으므로 이제 Android를 사용하기 위해 라이브러리를 만들어야합니다. 하나의 클래스는 미리 준비한 데이터베이스 (그림과 문자열 포함)를 처리합니다. Qt에서는 잘 작동하므로 코드가 강력합니다. 이클립스에서 내 안드로이드 프로젝트가 있는데, JNI는 런타임에 안드로이드가 충돌하지 않기 때문에 괜찮을 것으로 보인다. 문제는 데이터베이스가 누락되었다는 것입니다.C++ JNI 프로젝트에 sqlite 데이터베이스 포함

누군가가 apk 파일을 작성하여 프로젝트에 포함시키는 방법을 알려 줄 수 있습니까? 자산 폴더에 넣고 확장 된 Java 클래스를 만드는 방법을 설명하는 튜토리얼을 보았지만 C++의 JNI 수준에서 쿼리 호출을 사용할 때 i0m이 작동하는지 잘 모릅니다.

이전에 슬픈 것처럼 나는 컴파일이나 실행 시간에 오류가 없었습니다. 데이터베이스가 없으므로 응용 프로그램이 작동하지 않습니다. 네이티브 메소드의 정의를 공백으로 남겨두면 크래시가 발생하지 않으므로 네이티브 메소드 호출이 정상적으로 작동 함을 의미합니다.

예제는 C++에서 클래스 내가 가진 :

static { 
    System.loadLibrary("nativeLib"); 
} 

public native void openDatabase(); 
: 자바 클래스에 ...

JNIEXPORT void JNICALL Java_com_tamagotchi_ItemShop_openDatabase(JNIEnv *, jobject){ 
    db->open(); 
    } 

:

bool Database::open() { 
if (sqlite3_open(dataBaseName, &databaseConnection) == SQLITE_OK){ 
    return true; 
} 
return false; 
} 

내가 원래 전화로 전화


업데이트 : 데이터베이스가 assets 폴더에 포함되어 있고 getResources(). getAssets(). open ("some_file")을 사용하여 파일에 액세스 할 수있는 예제입니다. 문제는 이것이 자바 측을위한 것이지만 자바 측에서 액세스하려고하지는 않는다. nativelibrary를 사용하여 C++/JNI 측에서 액세스해야한다.

+1

질문이 잘 렸습니다. 편집하고 일부 코드 또는 오류 메시지를 게시하십시오. 우리는 무엇이 잘못되는지 추측 할 수 없습니다. – Mat

답변

0

다른 방식으로 해결되었습니다. 가상 SD 카드에 데이터베이스를로드하고 C++ 클래스의 데이터베이스 경로를 변경했습니다. 이제 제대로 작동합니다. 저주, 이건 옳은 방법이 아니지만, 늦어도 금요일까지는 프로젝트를 제출해야합니다 ... 다른 해결책도 있습니다 만, getResources()를 포함하는 API 2.3이 필요합니다. 네이티브 측면.

관련 문제