用djinni自动生成JNI相关文件-创新互联

一、djinni是什么
djinni是个工具,用来生成JNI相关接口。现在很多人都是只懂java,或者只懂C++,很少有人两头都精通;即使两头都精通,自己写JNI接口也很复杂。这时候djinni就能很好的解决这些问题,我们只要按要求配置JNI接口的对象,就能生成两边的接口。除了java与C++,还能生成ObjC与C++等接口。

成都创新互联公司-专业网站定制、快速模板网站建设、高性价比二七网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式二七网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖二七地区。费用合理售后完善,十年实体公司更值得信赖。

二、环境
java 1.8.0_101
djinni GitHub地址
msys2下载地址
因为djinni中的一些命令是linux中的命令方式,所以要下载个msys2,在msys2中运行
下载好后打开msys2,cd到djinni根目录下,输入以下命令来拉取库(整个过程时间很长)
src/run --help

用djinni自动生成JNI相关文件

三、编写djinni配置文件

配置文件中可以配置如下的接口,在C++中具体实现,然后被java或ObjC或其他语言调用

# This interface will be implemented in C++ and can be called from any language.
my_cpp_interface = interface +c {
    method_returning_nothing(value: i32);
    method_returning_some_type(key: string): another_record;
    static get_version(): i32;

    # Interfaces can also have constants
    const version: i32 = 1;
}

如果是C++调用其他语言的接口(+j指java,+o指ObjC),作如下定义

# This interface will be implemented in Java and ObjC and can be called from C++.
my_client_interface = interface +j +o {
    log_string(str: string): bool;
}

也可以定义其中需要一些实体类

my_enum = enum {
    option1;
    option2;
    option3;
}

my_flags = flags {
  flag1;
  flag2;
  flag3;
  no_flags = none;
  all_flags = all;
}

my_record = record {
    id: i32;
    info: string;
    store: set;
    hash: map;

    values: list;

    # Comments can also be put here

    # Constants can be included
    const string_const: string = "Constants can be put here";
    const min_value: another_record = {
        key1 = 0,
        key2 = ""
    };
}

another_record = record {
    key1: i32;
    key2: string;
} deriving (eq, ord)

配置好以后调用命令生成

src/run \
   --java-out JAVA_OUTPUT_FOLDER \
   --java-package com.example.jnigenpackage \
   --java-cpp-exception DbxException \ # Choose between a customized C++ exception in Java and java.lang.RuntimeException (the default).
   --ident-java-field mFooBar \ # Optional, this adds an "m" in front of Java field names
   \
   --cpp-out CPP_OUTPUT_FOLDER \
   \
   --jni-out JNI_OUTPUT_FOLDER \
   --ident-jni-class NativeFooBar \ # This adds a "Native" prefix to JNI class
   --ident-jni-file NativeFooBar \ # This adds a prefix to the JNI filenames otherwise the cpp and jni filenames are the same.
   \
   --objc-out OBJC_OUTPUT_FOLDER \
   --objc-type-prefix DB \ # Apple suggests Objective-C classes have a prefix for each defined type.
   \
   --objcpp-out OBJC_OUTPUT_FOLDER \
   \
   --idl MY_PROJECT.djinni

其中有几个重要的路径:
JAVA_OUTPUT_FOLDER java文件生成路径
CPP_OUTPUT_FOLDER cpp文件生成路径
JNI_OUTPUT_FOLDER jni文件生成路径
OBJC_OUTPUT_FOLDER objc文件生成路径(如果需要objc调用的话)
命令执行完成后去这几个路径把下面的文件拷贝到项目中使用即可。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:用djinni自动生成JNI相关文件-创新互联
网站网址:http://ybzwz.com/article/psgpd.html