Android C ++ OpenGL: невозможно найти статистику - PullRequest
1 голос
/ 24 февраля 2012

Я борюсь за запуск полностью нативного кода в виде C ++ OpenGL ES в NDK.

Идея состоит в том, чтобы полностью избежать необходимости иметь в проекте Android папку / src с множеством java-классов, взаимодействующих спроцесс, следовательно, повышение скорости и производительности встроенной системы.Итак, у нас будет вся программа в виде нативного C ++ в /jni.

. Требуется использование Android NativeActivity - см., Например: http://www.srombauts.fr/2011/03/01/android-2-3-nativeactivity и Android 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 Ответ

1 голос
/ 24 февраля 2012

Я думаю, что сообщение logcat - это красная сельдь.

Ваша библиотека JNI называется libprogram3D.so, но вы называете ее «droidblaster» в манифесте XML (это то, что ОС будет использовать для загрузки .so). Попробуйте изменить один, чтобы они совпадали.

...