FreeType 2、Android、NDK ..将库句柄传回 App

问题描述 投票:0回答:0

我正在 Android 应用程序中使用 NDK 试用 FreeType2。

我使用的工作流程是

  1. 下载freetype,解压到我的cpp文件夹 2.在 Cmakelists 中包含 freetype 3.在模拟器上全部编译成功

但我在连接真实设备时遇到问题。

这是我的活动/课程

  1. 使用 System.loadlibrary('mylib') 加载库
  2. 通过 JNI 调用 cpp
  3. 函数调用,初始化 FT (FT_Init_FreeType) 并返回库句柄 (jlong)

在 EMULATOR 上,它似乎返回了一个正确的句柄,但在真实设备上我得到了很大的负数作为句柄。回到应用程序。

这是我的通话 cpp 代码

   /*********THIS DOESNT WORK ON real USB connected device ******    
extern "C"
JNIEXPORT jlong JNICALL
Java_com_pearlspotsystems_nativecppwithft_MainActivity_getFTLibrary(JNIEnv *env, jobject thiz) 
{
      FT_Library library;

      int major, minor, patch;
      long err = FT_Init_FreeType(&library);
      if(err) {
        return 0;
      } else {
         return (jlong) library;
      }

}

在真实设备上,我在应用程序中得到类似“-547637666626 ...”的句柄 这看起来不像一个合适的指针/句柄

1.这是将 FT_Library 转换为 jlong 的问题吗?或者是其他东西。 2. 为什么它可以在模拟器上运行? 3. 有趣的是,我的另一个函数初始化 FT 并获取版本并返回 字符串中的细节甚至可以在真实设备上使用。这是 CPP 的..

**/********THIS WORKS ON BOTH EMULATOR and REAL DEVICE!!!!***/**
extern "C"
JNIEXPORT jstring JNICALL
Java_com_pearlspotsystems_nativecppwithft_MainActivity_getFreeTypeVersion(JNIEnv *env,
                                                                     jobject thiz) {
FT_Library library;
int major, minor, patch;
long err = FT_Init_FreeType(&library);
if(err) {
    std::string err_string = "Error!!!!!!!";
    return env->NewStringUTF(err_string.c_str());
} else {
    FT_Library_Version((FT_Library) library, &major, &minor, &patch);
    std::string ret_string = "FT-Version:" + std::to_string(major) + "." + 
    std::to_string(minor);
    return env->NewStringUTF(ret_string.c_str());
}
}

怎么了?有人能指出我正确的方向吗?

android-ndk java-native-interface freetype
© www.soinside.com 2019 - 2024. All rights reserved.