如何将现有的C++代码移植到Android?
Android NDK提供了标准的工具包,可以把代码编译成动态库.so供java程序调用。在实际操作中, 有以下注意要点:
1. 对于用VC++写的程序,最好用Clang tool chain,因为它有VC++兼容模式。如果本来代码就是基于Gcc的,那就用Gcc
2. 开发环境的配置:
有很多选项,
基于NDK直接开发。 命令行支持,最新的NDK不再需要cgwin
基于NDK + Android Studio,android studio可以支持调用编译好的.so,或直接编译 C++
http://ph0b.com/android-studio-gradle-and-ndk-integration/
http://www.shaneenishry.com/blog/2014/08/17/ndk-with-android-studio/
基于Visual studio开发,有第三方开发者把相关的开发包做成了MSBuild,可以在VS里调用
http://code.google.com/p/vs-android/
http://android-plus-plus.com/ 支持Clang,调试
3. 调试
总之感觉调试没有好工具,可以用GDB.
最原始的方法使用 printf,需要把stdut, stderr重定向到logcat一下代码可以做到
void Java_com_example_nativeaudio_NativeAudio_nativePipeSTDOUTToLogcat(JNIEnv* env, jclass cls)
{
int pipes[2];
pipe(pipes);
dup2(pipes[1], STDOUT_FILENO);
FILE *inputFile = fdopen(pipes[0], "r");
char readBuffer[256];
while (1) {
fflush(stdout);
fgets(readBuffer, sizeof(readBuffer), inputFile);
// __android_log_write(2, "stdout", readBuffer);
__android_log_print(ANDROID_LOG_INFO, "Native", readBuffer);
fflush(stdout);
}
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
nativePipeSTDOUTToLogcat();
}
}
logThread = new HelloThread();
logThread.start();