java-使用Xcode 4 / OS X 10.6调试JNI代码

我一直在努力寻找Windows / Visual Studio中脑筋急转弯的东西.我有一个要在OS X 10.6下使用的JNI库,我想使用Java可执行文件调用它并在Xcode下进行调试:单步执行代码,检查JNI库中的变量,设置断点等.

这是一个有效的JNI示例,可以从命令行编译并正常运行.如果有人可以告诉我如何在Xcode中进行设置,我将不胜感激.理想情况下,我想要分步说明,从Xcode的头开始,并适当地从下面的代码剪切和粘贴,以产生可在Xcode 4下调试的东西,并允许我在JNI代码中设置断点,检查变量,请参见stacktraces等.

为表示感谢,我将向第一位提供20美元指示的人发送20美元,如果您给我贝宝(Paypal)地址,我也可以在其末端复制.

提前致谢!

HelloWorld.java

class HelloWorld {
    public native String displayHelloWorld();

    static {
        System.loadLibrary("HelloWorldImp");
    }

    public static void main(String[] args) {
        System.out.println("--> "+new HelloWorld().displayHelloWorld());
    }
}

HelloWorldImp.mm

#include <stdio.h>
#include <jni.h>

#include <string>

#import <Foundation/Foundation.h>

#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT jstring JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString* name = @"Yo Cocoa";
    std::string s = [name UTF8String];    

    jstring ret = env->NewStringUTF(s.c_str());

    [pool drain];

    return ret;
}

#ifdef __cplusplus
}
#endif

buildjni.sh

gcc -bundle -I/System/Library/Frameworks/JavaVM.framework/Headers -lstdc++ -o libHelloWorldImp.jnilib -framework Foundation HelloWorldImp.mm

解决方法:

干得好.

建立库
您可能知道Mac上的jni lib必须以libFoo.jnilib的形式命名.然后,通过调用System.loadLibrary(“ Foo”);从Java加载lib.
1.创建一个新的动态库项目.将其命名为libSomething.那是命名战的一半.
2.在目标构建设置中搜索“可执行扩展”.默认情况下,它设置为dylib.修改它为jnilib.那是命名战的下半场.
3.将JavaVM框架添加到链接的框架中.其中包含JNI内容.
4.照常生成本机头文件.
5.将其包含在您的项目中,并创建一个相应的.m文件.
6.您必须修改jni.h的包含路径.在Mac上,这是< JavaVM / jni.h>或使用JavaNativeFoundation框架.我推荐后者.
7.(可选)JavaNativeFoundation提供了许多宏和方法,这些宏和方法将使与Java / Objective-C之间的数据/方法转换变得容易得多.它没有很好的文档记录,但是值得研究.如果决定使用JNF,请使用JavaVM框架上的空心三角形.您将看到JNF是子框架.将其向上拖动到等于JavaVM的顶层.然后,您可以开始使用它.导入< JavaNativeFoundation / JavaNativeFoundation.h>在JNF_COCOA_ENTER上进行Google搜索,以查看有关如何使用JNF的示例

您现在应该能够构建有效的jni库.假设您的代码中没有错误,那么您就完成了.

上一篇:Unity打包IOS采坑记


下一篇:iOS 上传appstore 一直卡在正在通过 App Store 进行鉴定(转)