2012-02-24 17 views
1

NDKのC++ OpenGL ESとして完全なネイティブコードを実行するために戦っています。Android C++ OpenGL:統計情報が見つかりません

アイデアは完全ので、組み込みシステムの速度とパフォーマンスを高め、AndroidのプロジェクトにプロセスをインタフェースするJavaクラスの多くが付いているフォルダ/ SRCを持っている必要性を回避するためです。だから、私たちは/ jniの下でネイティブC++としてプログラム全体を持っていきます。

Android NativeActivityを使用する必要があります。たとえば、 http://www.srombauts.fr/2011/03/01/android-2-3-nativeactivityAndroid NativeActivityを参照してください。そのために

、/ SRCが削除され、また、AndroidManifest.xmlには、プロジェクトのルートに移動され、それに応じて修正:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.packtpub.program3D" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-feature android:glEsVersion="0x00020000"></uses-feature> 
    <uses-sdk android:targetSdkVersion="15" android:minSdkVersion="15"></uses-sdk> 

    <application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 

    <activity android:name="android.app.NativeActivity" 
     android:label="@string/app_name"> 
     <meta-data android:name="android.app.lib_name" 
      android:value="program3D"/> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category 
       android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 

    </application> 
</manifest> 

のAndroidManifest.xmlに「-機能を使用しています」でなければなりません"glEsVersion"パラメータに "0x00020000"と指定されている場合、NDKはデフォルト1.0のバージョンを使用します。 Android.mkで

、プログラムをコンパイルして構築するためのパラメータとして、それを含む、android_native_app_glue有するべきである:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := program3D 
LOCAL_SRC_FILES := com_packtpub_program3D.c program3D.c 
LOCAL_LDLIBS := -landroid -llog -lEGL -lGLESv1_CM 
LOCAL_STATIC_LIBRARIES := android_native_app_glue 
include $(BUILD_SHARED_LIBRARY) 

$(call import-module,android/native_app_glue) 

C/C++コードは/jni/Main.cppに配置されます。ここでは、Main.cpp:http://developer.android.com/reference/android/app/NativeActivity.htmlに置かれた、テスト目的に便利なテンプレートプログラムにアクセスできます。

ビルドとコンパイルでは何のヒットもなく、うまくいきました。出力は次のとおりです。

**** Build of configuration Default for project program3D **** 

ndk-build NDK_DEBUG=1 V=1 all 
rm -f ./libs/x86/lib*.so ./libs/armeabi/lib*.so ./libs/armeabi-v7a/lib*.so 
rm -f ./libs/x86/gdbserver ./libs/armeabi/gdbserver ./libs/armeabi-v7a/gdbserver 
rm -f ./libs/x86/gdb.setup ./libs/armeabi/gdb.setup ./libs/armeabi-v7a/gdb.setup 
Gdbserver  : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver 
mkdir -p ./libs/armeabi 
install -p /opt/android/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/gdbserver ./libs/armeabi/gdbserver 
Gdbsetup  : libs/armeabi/gdb.setup 
mkdir -p ./libs/armeabi 
echo "set solib-search-path ./obj/local/armeabi" > ./libs/armeabi/gdb.setup 
echo "directory /opt/android/android-ndk-r7/platforms/android-14/arch-arm/usr/include /opt/android/android-ndk-r7/sources/android/native_app_glue /opt/android/android-ndk-r7/sources/cxx-stl/system/include jni" >> ./libs/armeabi/gdb.setup 
Install  : libprogram3D.so => libs/armeabi/libprogram3D.so 
mkdir -p ./libs/armeabi 
install -p ./obj/local/armeabi/libprogram3D.so ./libs/armeabi/libprogram3D.so 
/opt/android/android-ndk-r7/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-strip --strip-unneeded ./libs/armeabi/libprogram3D.so 

**** Build Finished **** 

グレート!右?ではない正確に。

実行を依頼されたら...単に起動しません。代わりにLogCatにのみ、次た暗号メッセージを表示され、プログラムがロードまたはデバイスで実行されない:

system_process : ThrottleSercie : unable to find stats for iface rmnet0 

何がプログラムをデバッグし、きれいにコンパイルするという事実を考えると、不足していることができます。

誰かが提案している可能性がありますか?すべてのコメントは高く評価されています。

答えて

1

私はlogcatメッセージは赤ちゃんだと思います。

あなたのJNIライブラリはlibprogram3D.soという名前が付けられていますが、マニフェストXML(これはOSが.soをロードしようとするものです)では "droidblaster"と呼ばれています。一致するように変更してみてください。

+0

こんにちはReuben ...私はあなたが示唆したように正しくチェックし、更新しました。出力は依然として同じです。 – ThreaderSlash

+0

モジュールエントリポイントにデバッグトレースの行を挿入します。それがlogcatに表示されない場合は、.soがロードされていないことがわかります。 –

+0

私はすでに "ndk-build NDK_DEBUG = 1 V = 1 all"を入れました。問題を追跡するために、どこで追加のパラメータを使用できますか? – ThreaderSlash

関連する問題