如何将现有的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();
本文介绍如何将现有的C++代码移植到Android平台。通过使用Android NDK提供的工具,可以将C++代码编译为.so动态库供Java程序调用。文章详细说明了开发环境配置的多种选项,包括基于NDK直接开发、结合Android Studio以及Visual Studio进行开发,并提供了调试技巧。
1742

被折叠的 条评论
为什么被折叠?



