91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用djinni自動生成JNI相關文件

發布時間:2020-07-17 06:12:21 來源:網絡 閱讀:1484 作者:雪飄七月 欄目:移動開發

一、djinni是什么
djinni是個工具,用來生成JNI相關接口。現在很多人都是只懂java,或者只懂C++,很少有人兩頭都精通;即使兩頭都精通,自己寫JNI接口也很復雜。這時候djinni就能很好的解決這些問題,我們只要按要求配置JNI接口的對象,就能生成兩邊的接口。除了java與C++,還能生成ObjC與C++等接口。

二、環境
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<string>;
    hash: map<string, i32>;

    values: list<another_record>;

    # 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調用的話)
命令執行完成后去這幾個路徑把下面的文件拷貝到項目中使用即可。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

翼城县| 涟水县| 开化县| 扎赉特旗| 武义县| 永仁县| 邵武市| 女性| 司法| 瑞金市| 应城市| 花莲县| 万盛区| 安新县| 东乡族自治县| 屯留县| 廊坊市| 房产| 彰武县| 六安市| 栖霞市| 通海县| 疏勒县| 合江县| 林甸县| 屏南县| 墨玉县| 北海市| 和田县| 贵溪市| 广宁县| 左云县| 上饶县| 绩溪县| 清丰县| 四川省| 南皮县| 怀仁县| 齐河县| 广宗县| 新乡市|