Articles of c ++

在100%C ++环境下为Android编程?

我一直在为我未来的游戏开发C ++游戏引擎运行时环境,并开始将android视为一个平台。 我注意到它与Java紧密绑定并大量使用Java VM。 但是否可以在Android NDK中维持完整的C ++运行时环境? 我没有反对Java,如果必须的话,我准备使用它,但性能是我最关心的问题之一(我打算让我的游戏占用大量资源),特别是在手机上。 如果可以使用完整的C ++环境,我将如何在Eclipse Indigo CDT中实现它? 我是否能够提前为Android创建已编译的游戏可执行文件以获得最佳性能? 我是否需要在Eclipse中安装任何其他插件? 我可以使用MinGW来编译我的游戏,还是需要使用不同的编译器? 如果我不得不以某种方式使用Java,那么甚至需要编译C ++代码吗? 这些都是我想要回答的问题,以便在Eclipse IDE中获得稳定的开发环境。 请知道我对Android开发和一般的多平台编程仍然相当新。 我的目标是创建一个能够充分利用新硬件的游戏引擎,特别是在手机上! 感谢您提出的任何建议!

使用C / C ++的Android开发比Java快吗?

我环顾四周,无法find有关此确切问题的任何问题。 我确实find了一些类似的问题,但不完全是我想知道的。 如果您使用C / C ++开发Android应用程序,与在Java中开发相同的应用程序相比,是否存在(实质性)速度差异?

将C ++ longtypes转换为JNI jlong

我正在使用JNI在C ++和Java之间传递数据。 我需要传递一个’long’types,并且使用类似的东西: long myLongVal = 100; jlong val = (jlong)myLongVal; CallStaticVoidMethod(myClass, “(J)V”, (jvalue*)val); 但是在Java中,当检索到’long’参数时,它会被检索为一些非常大的负数。 我究竟做错了什么?

Android std和stl支持

我正在玩android ndk。 我正在使用带有cygwin的Window Vista(最新版本)。 我在手机上编译并发布了hello world jni示例。 这是工作。 代码是(是一个.cpp文件): #include #include extern “C” { JNIEXPORT jstring JNICALL Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis); }; jstring Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv* env, jobject javaThis) { return env->NewStringUTF(“Hello from native code!”); } 我想添加一些修改,只是为了稍微玩一下: #include 然后,在上面的函数中,我补充说: int a; a=std::min(10, 5); 但是编译器说它找不到文件’algorithm’并且min()不是std的一部分。 经过一番搜索,我发现android ndk有一个gnu-libstdc ++目录,里面有所有需要的std文件。 阅读NDK文档,我已经了解到usint std :: *应该可以在不对代码进行任何修改的情况下工作(如果包含正确的头文件)。 但似乎gg on cygwin无法find所需的文件。 为了能够在android ndk应用程序中的.cpp文件中使用std和stl,有哪些步骤?

Android Studio – 没有将C ++链接到Gradle的选项

我一直试图从android访问一些CPP库,并一直按照这里的说明: https://developer.android.com/studio/projects/add-native-code.html#link-gradle 问题是,当我右键单击应用程序模块时,似乎没有选项’Link C ++ Project with Gradle’。 其他人遇到过这个问题吗? 你解决了吗?

如何在Android上的C中加载我自己的Java类?

我试图调用我使用Android NDK从C编写的一些Java代码。 该应用程序是NativeActivity应用程序。 我必须访问一些仅在Java中可用的function,并且该function要求您子类化另一个类,所以我不能直接从C进行调用。因此,我有这样的Java代码: // src/com/example/my/package/SubClass.java package com.example.my.package; import android.foo.TheSuperClass; public class SubClass extends TheSuperClass { public SubClass() { setImportantProperty(true); } } 我也有这样的C代码: // Some file.c void setThatImportantJavaProperty() { JavaVM *vm = AndroidGetJavaVM(); // This returns a valid JavaVM object JNIEnv* env; (*vm)->AttachCurrentThread(vm, &env, 0); jclass theSubClass = (*env)->FindClass(env, “com/example/my/package/SubClass”); jthrowable exception = (*env)->ExceptionOccurred(env); if […]

为什么gcc发送代码与ARM指令集的2字节边界对齐?

我正在使用GCC(Android NDK中包含的版本)检查我正在为ARM Android平台编译的C程序的汇编语言输出。 我指定的ARM指令集长度为4个字节而不是THUMB,但令人惊讶的是,emmited汇编语言代码将函数与2字节边界对齐! 以下是生成的代码示例,显示了错误的.align指令: .Ltext0: .global __aeabi_dmul .global __aeabi_d2iz .section .text.InitializeFIRFilter,”ax”,%progbits .align 2 .global InitializeFIRFilter .type InitializeFIRFilter, %function InitializeFIRFilter: .fnstart 根据这个文件 ,正确的对齐应该是4,这是有道理的。 我试图通过使用-falign-functions = 4来强制对齐,但它被忽略了。 以下是我在Android.mk文件中指定的构建标志 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_ARM_MODE := arm LOCAL_MODULE := nativeJadeMobile LOCAL_SRC_FILES := nativeJadeMobile.c fftasm.s LOCAL_LDLIBS := -llog LOCAL_CFLAGS += -marm -ffast-math -O2 -march=armv6 -falign-functions=4 -save-temps -S […]

Android上实时图形编程的最佳语言是什么?

一些谷歌搜索让我相信C ++是实时2D图形编程的最佳语言,但由于Android是基于Java的,它仍然是最好的选择吗? 或者我们必须使用NDK减速或其他什么事实? 我的程序也有很多科学计算,我知道C ++最好/最快… 我以前从未对Android做过任何事情,所以我现在真的很无助。 如果我只是错误的方式,请给我其他建议…我遇到的其他一些词汇是OpenGL(我有经验,但更多的是3D,对吗?)和Canvas(不要相当得到这个)? 如果我能够访问类似GPU的function,那就太棒了。

是否#ifdef ANDROID等同于#ifdef WIN32

我有一些c ++代码,有一堆#ifdef WIN32,否则我们假设它的IOS代码。 但是我现在正试图将这个相同的c ++代码用于android端口。 #ifdef WIN32 ||是否有某种等价物 ANDROID?

如何确定为Android / NDK或iOS编译的C代码

我正在重用iOS应用程序和Android应用程序中的旧C库。 我想自定义一些宏定义(例如用于日志记录)。 是否有标准定义来检查(使用#ifdef)是否正在为iOS或Android / NDK编译代码?