使用zinnia制作android手写输入功能(上)-------------------编译zinnia
2012-09-23 16:29
435 查看
环境:64bit win7+eclipse+cygwin+ndk_r8+zinnia0.06
到zinnia官网下载source以及zinnia-tomoe,按照官网的install方法用cygwin制作出model文件,如下图
View Code
在libzinniajni中的com_tomhw_MainActivity为android项目的包名跟activity名字
其余的文件全部都来自zinnia的源码包
用cygwin进入到jni文件夹并用ndk编译($NDK_ROOT为用户在安装ndk时自定义的),具体如下图
如果编译成功的话会在jni的同一级目录中多出libs以及obj文件夹,
其中libs中的armeabi中的.so文件正是所需要的文件
到zinnia官网下载source以及zinnia-tomoe,按照官网的install方法用cygwin制作出model文件,如下图
View Code
#include "zinnia.h" #include <jni.h> #include "libzinniajni.h" //--------------------------------------------charater method /* * Method: zinnia_character_new * Signature: ()J */ jlong Java_com_tomhw_MainActivity_characterNew (JNIEnv *envenv, jobject jobj) { zinnia_character_t* p = zinnia_character_new(); return reinterpret_cast<jlong>(p); } /* * Method: zinnia_character_destroy * Signature: (J)V */ void Java_com_tomhw_MainActivity_characterDestroy (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); zinnia_character_destroy(p); } /* * Method: zinnia_character_set_value * Signature: (JLjava/lang/String;)V */ void Java_com_tomhw_MainActivity_characterSetValueForString (JNIEnv *env, jobject jobj, jlong character, jstring jstr) { } /* * Method: zinnia_character_set_value2 * Signature: (JLjava/lang/String;J)V */ void Java_com_tomhw_MainActivity_characterSetValueForLong (JNIEnv *env, jobject jobj, jlong character, jstring jstr, jlong length) { } /* * Method: zinnia_character_value * Signature: (J)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_characterValue (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return env->NewStringUTF(zinnia_character_value(p)); } /* * Method: zinnia_character_set_width * Signature: (JJ)V */ void Java_com_tomhw_MainActivity_characterSetWidth (JNIEnv *env, jobject jobj, jlong character, jlong width) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); zinnia_character_set_width(p, width); } /* * Method: zinnia_character_set_height * Signature: (JJ)V */ void Java_com_tomhw_MainActivity_characterSetHeight (JNIEnv *env, jobject jobj, jlong character, jlong height) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); zinnia_character_set_height(p, height); } /* * Method: zinnia_character_width * Signature: (J)J */ jlong Java_com_tomhw_MainActivity_characterWidth (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_width(p); } /* * Method: zinnia_character_height * Signature: (J)J */ jlong Java_com_tomhw_MainActivity_characterHeight (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_height(p); } /* * Method: zinnia_character_clear * Signature: (J)V */ void Java_com_tomhw_MainActivity_characterClear (JNIEnv *env, jobject jobj, jlong stroke) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(stroke); zinnia_character_clear(p); } /* * Method: zinnia_character_add * Signature: (JJII)I */ jint Java_com_tomhw_MainActivity_characterAdd (JNIEnv *env, jobject jobj, jlong character, jlong id, jint x, jint y) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); zinnia_character_add(p, id, x, y); } /* * Method: zinnia_character_strokes_size * Signature: (J)J */ jlong Java_com_tomhw_MainActivity_characterStrokesSize (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_strokes_size(p); } /* * Method: zinnia_character_stroke_size * Signature: (JJ)J */ jlong Java_com_tomhw_MainActivity_characterStrokeSize (JNIEnv *env, jobject jobj, jlong character, jlong id) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_stroke_size(p, id); } /* * Method: zinnia_character_x * Signature: (JJJ)I */ jint Java_com_tomhw_MainActivity_characterX (JNIEnv *env, jobject jobj, jlong character, jlong id, jlong index) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_x(p, id, index); } /* * Method: zinnia_character_y * Signature: (JJJ)I */ jint Java_com_tomhw_MainActivity_characterY (JNIEnv *env, jobject jobj, jlong character, jlong id, jlong index) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return zinnia_character_y(p, id, index); } /* * Method: zinnia_character_parse * Signature: (JLjava/lang/String;)I */ jint Java_com_tomhw_MainActivity_characterParse (JNIEnv *env, jobject jobj, jlong, jstring jstr) { } /* * Method: zinnia_character_parse2 * Signature: (JLjava/lang/String;J)I */ jint Java_com_tomhw_MainActivity_characterParse2 (JNIEnv *env, jobject jobj, jlong character, jstring str, jlong length) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); /* TODO */ return 0; } /* * Method: zinnia_character_to_string * Signature: (JLjava/lang/String;J)I */ jint Java_com_tomhw_MainActivity_1characterToString (JNIEnv *env, jobject jobj, jlong character, jstring buf, jlong length) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); /* TODO */ return 0; } /* * Method: zinnia_character_strerror * Signature: (J)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_characterStrerror (JNIEnv *env, jobject jobj, jlong character) { zinnia_character_t* p = reinterpret_cast<zinnia_character_t*>(character); return env->NewStringUTF(zinnia_character_strerror(p)); } //---------------------------------------result method /* * Method: zinnia_result_value * Signature: (JJ)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_resultValue (JNIEnv *env, jobject jobj, jlong result, jlong index) { zinnia_result_t* p = reinterpret_cast<zinnia_result_t*>(result); return env->NewStringUTF(zinnia_result_value(p, index)); } /* * Method: zinnia_result_score * Signature: (JJ)F */ jfloat Java_com_tomhw_MainActivity_resultScore (JNIEnv *env, jobject jobj, jlong result, jlong index) { zinnia_result_t* p = reinterpret_cast<zinnia_result_t*>(result); return zinnia_result_score(p, index); } /* * Method: zinnia_result_size * Signature: (J)J */ jlong Java_com_tomhw_MainActivity_resultSize (JNIEnv *env, jobject jobj, jlong result) { zinnia_result_t* p = reinterpret_cast<zinnia_result_t*>(result); return zinnia_result_size(p); } /* * Method: zinnia_result_destroy * Signature: (J)V */ void Java_com_tomhw_MainActivity_resultDestroy (JNIEnv *env, jobject jobj, jlong jlongv) { } //--------------------------------------------------recognizer method /* * Method: zinnia_recognizer_new * Signature: ()J */ jlong Java_com_tomhw_MainActivity_recognizerNew (JNIEnv *env, jobject jobj) { zinnia_recognizer_t* p = zinnia_recognizer_new(); return reinterpret_cast<jlong>(p); } /* * Method: zinnia_recognizer_destroy * Signature: (J)V */ void Java_com_tomhw_MainActivity_recognizerDestroy (JNIEnv *env, jobject jobj, jlong recognizer) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); zinnia_recognizer_destroy(p); } /* * Method: zinnia_recognizer_open * Signature: (JLjava/lang/String;)I */ jint Java_com_tomhw_MainActivity_recognizerOpen (JNIEnv *env, jobject jobj, jlong recognizer, jstring filename) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); return zinnia_recognizer_open(p, env->GetStringUTFChars(filename, NULL)); } /* * Method: zinnia_recognizer_open_from_ptr * Signature: (JLjava/lang/String;J)I */ jint Java_com_tomhw_MainActivity_recognizerOpenFromPtr (JNIEnv *env, jobject jobj, jlong, jstring jstr, jlong jlongv) { } /* * Method: zinnia_recognizer_close * Signature: (J)I */ jint Java_com_tomhw_MainActivity_recognizerClose (JNIEnv *env, jobject jobj, jlong recognizer) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); return zinnia_recognizer_close(p); } /* * Method: zinnia_recognizer_size * Signature: (J)J */ jlong Java_com_tomhw_MainActivity_recognizerSize (JNIEnv *env, jobject jobj, jlong recognizer) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); return zinnia_recognizer_size(p); } /* * Method: zinnia_recognizer_value * Signature: (JJ)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_recognizerValue (JNIEnv *env, jobject jobj, jlong recognizer, jlong index) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); return env->NewStringUTF(zinnia_recognizer_value(p, index)); } /* * Method: zinnia_recognizer_strerror * Signature: (J)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_recognizerStrerror (JNIEnv *env, jobject jobj, jlong recognizer) { zinnia_recognizer_t* p = reinterpret_cast<zinnia_recognizer_t*>(recognizer); return env->NewStringUTF(zinnia_recognizer_strerror(p)); } /* * Method: zinnia_recognizer_classify * Signature: (JLjava/lang/String;J)J */ jlong Java_com_tomhw_MainActivity_recognizerClassify (JNIEnv *env, jobject jobj, jlong recognizer, jlong character, jlong nbest) { zinnia_recognizer_t* recog = reinterpret_cast<zinnia_recognizer_t*>(recognizer); zinnia_character_t* ch = reinterpret_cast<zinnia_character_t*>(character); zinnia_result_t* result = zinnia_recognizer_classify(recog, ch, nbest); return reinterpret_cast<jlong>(result); } //-------------------------------------------trainer method /* * Method: zinnia_trainer_new * Signature: ()J */ jlong Java_com_tomhw_MainActivity_trainerNew (JNIEnv *env, jobject jobj) { zinnia_trainer_t* trainer = zinnia_trainer_new(); return reinterpret_cast<jlong>(trainer); } /* * Method: zinnia_trainer_destroy * Signature: (J)V */ void Java_com_tomhw_MainActivity_trainerDestroy (JNIEnv *env, jobject jobj, jlong trainer) { zinnia_trainer_t* p = reinterpret_cast<zinnia_trainer_t*>(trainer); zinnia_trainer_destroy(p); } /* * Method: zinnia_trainer_add * Signature: (JJ)I */ jint Java_com_tomhw_MainActivity_trainerAdd (JNIEnv *env, jobject jobj, jlong trainer, jlong character) { zinnia_trainer_t* p = reinterpret_cast<zinnia_trainer_t*>(trainer); zinnia_character_t* ch = reinterpret_cast<zinnia_character_t*>(character); return zinnia_trainer_add(p, ch); } /* * Method: zinnia_trainer_clear * Signature: (J)V */ void Java_com_tomhw_MainActivity_trainerClear (JNIEnv *env, jobject jobj, jlong trainer) { zinnia_trainer_t* p = reinterpret_cast<zinnia_trainer_t*>(trainer); zinnia_trainer_clear(p); } /* * Method: zinnia_trainer_train * Signature: (JLjava/lang/String;)I */ jint Java_com_tomhw_MainActivity_trainerTrain (JNIEnv *env, jobject jobj, jlong trainer, jstring filename) { zinnia_trainer_t* p = reinterpret_cast<zinnia_trainer_t*>(trainer); return zinnia_trainer_train(p, (const char*)(env->GetStringUTFChars(filename, NULL))); } /* * Method: zinnia_trainer_strerror * Signature: (J)Ljava/lang/String; */ jstring Java_com_tomhw_MainActivity_trainerStrerror (JNIEnv *env, jobject jobj, jlong trainer) { zinnia_trainer_t* p = reinterpret_cast<zinnia_trainer_t*>(trainer); return env->NewStringUTF(zinnia_trainer_strerror(p)); } /* * Method: zinnia_trainer_convert_model * Signature: (Ljava/lang/String;Ljava/lang/String;D)I */ jint Java_com_tomhw_MainActivity_trainerConvertModel (JNIEnv *env, jobject jobj, jstring txt_model, jstring binary_mode, jdouble compression_threshold) { } /* * Method: zinnia_trainer_make_header * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;D)I */ jint Java_com_tomhw_MainActivity_trainerMakeHeader (JNIEnv *env, jobject jobj, jstring txt_model, jstring header_file, jstring name, jdouble compression_threashold) { }
在libzinniajni中的com_tomhw_MainActivity为android项目的包名跟activity名字
其余的文件全部都来自zinnia的源码包
用cygwin进入到jni文件夹并用ndk编译($NDK_ROOT为用户在安装ndk时自定义的),具体如下图
如果编译成功的话会在jni的同一级目录中多出libs以及obj文件夹,
其中libs中的armeabi中的.so文件正是所需要的文件
相关文章推荐
- 使用zinnia制作android手写输入功能(上)-------------------编译zinnia
- 使用zinnia制作android手写输入功能(下)-------------------在项目中使用zinnia
- 使用zinnia制作android手写输入功能(下)-------------------在项目中使用zinnia
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- [置顶] Android 百度地图开发--- 导航功能输入起始地址实现导航,地址解析与反解析的使用
- 【转】android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作等。
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。
- Win10手写输入功能使用教程
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。
- android出现注: 某些输入文件使用或覆盖了已过时的 API。 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。 注: 某些输入文件使用了未经检查或不安全的操作。 注
- 使用Android手机制作的语音控制坦克,很有创意
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- Android greenDao 使用教程(一)源码编译与使用
- Android使用代码模拟HOME键的功能
- Android 平台下编译和使用 i2c-tools
- android使用Dialog实现复选功能与数据库结合综合实例
- FFmpeg Android平台编译与使用