【问题标题】:Android C++ OpenGL: unable to find statsAndroid C++ OpenGL:无法找到统计信息
【发布时间】:2012-02-24 08:53:58
【问题描述】:

我正在努力在 NDK 中以 C++ OpenGL ES 的形式运行完全本机代码。

这个想法是为了完全避免需要在 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中的“uses-feature”必须为“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

考虑到程序调试和编译良好的事实,可能缺少什么。

有人可能有什么建议吗?所有 cmets 都受到高度赞赏。

【问题讨论】:

    标签: android c++ opengl-es android-ndk native


    【解决方案1】:

    我认为 logcat 消息是红鲱鱼。

    您的 JNI 库似乎名为 libprogram3D.so,但您在清单 XML 中将其称为“droidblaster”(操作系统将使用它来尝试加载 .so)。试着换一个,让它们匹配。

    【讨论】:

    • 您好鲁本...我按照您的建议检查并正确更新了它。输出还是一样的。
    • 在你的模块入口点放一行调试跟踪。如果它没有出现在 logcat 中,你就知道 .so 没有被加载。
    • 我已经放了“ndk-build NDK_DEBUG=1 V=1 all”。在哪里以及可以使用哪些其他额外参数来追踪问题?
    • “参数”?我说你应该验证模块入口点是否被调用。在您的情况下,这是 C 函数 android_main(struct android_app* state)。如果它没有被调用,你就知道你的库没有被加载。如果它正在被调用,你就知道问题出在你的应用程序中。
    • 我在android_main的入口处放了一个断点。它没有被调用。知道为什么不调用它吗?
    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多