test.java

public class test {public native String test();public native byte[] testbyte(byte[] by);}
hello.c

#include #include #include "com_example_jnitest_test.h"#include #include #define LOG_TAG "jni_log"#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)JNIEXPORT jstring JNICALL Java_com_example_jnitest_test_test(JNIEnv * env, jobject obj){LOGI("------test-------");return (*env)->NewStringUTF(env, "jni test 1234567890");}void printData(char *info, char *d, int len){int i;char buf[256];for(i = 0; i < len; i++){sprintf(buf+i*3, "%02x ", *d++);}LOGI("%s %s", info, buf);}JNIEXPORT jbyteArray JNICALL Java_com_example_jnitest_test_testbyte(JNIEnv * env, jobject obj, jbyteArray jarrByte){jsize len = (*env)->GetArrayLength(env, jarrByte);LOGI("GetArrayLength = %d", len);jbyte *b = (*env)->GetByteArrayElements(env, jarrByte, 0);if(b == NULL){LOGI("b is null");return NULL;}printData("b data:", b, len);char tmp[] ={0x11,0x12,0x13,0x14,0x15};char buf[128];memcpy(buf, b, len);memcpy(buf+len, tmp, sizeof(tmp));int size = len+sizeof(tmp);jbyteArray ret = (*env)->NewByteArray(env, size);(*env)->SetByteArrayRegion(env, ret, 0, size, buf);(*env)->ReleaseByteArrayElements(env, ret, b, 0);return ret;}

MainActivity.java

public static class PlaceholderFragment extends Fragment {public PlaceholderFragment() {}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View rootView = inflater.inflate(R.layout.fragment_main, container,false);System.loadLibrary("Hello");TextView tv = (TextView)rootView.findViewById(R.id.test);test t = new test();tv.setText(t.test());Log.d("jni", "test");byte[] by = {0x01,0x02,0x03};byte[] out = t.testbyte(by);Log.d("jni",b2h(out));return rootView;}}private static String b2h(byte[] in){String ret = "";for(int i = 0; i < in.length; i++){String tmp = Integer.toHexString(in[i]&0xff);if(tmp.length() == 1) tmp = "0" + tmp;ret += tmp+" ";}return ret;}


结果:

05-25 02:30:53.502: I/jni_log(330): ------test-------05-25 02:30:53.502: D/jni(330): test05-25 02:30:53.512: I/jni_log(330): GetArrayLength = 305-25 02:30:53.512: I/jni_log(330): b data: 01 02 03 05-25 02:30:53.512: W/dalvikvm(330): JNI: unpinPrimitiveArray(0x4054f888) failed to find entry (valid=1)05-25 02:30:53.512: D/jni(330): 01 02 03 11 12 13 14 15 








更多相关文章

  1. android: MapView加载多个 overlay 内存溢出
  2. Android(安卓)7.0调用系统相机返回路径问题
  3. Android中EventBus事件总线发送网络请求结果更新UI
  4. Android(安卓)通过百度地图SDK 实现地图显示和定位(一)
  5. Android设置Settings:预读取设置的选项和更新设置结果【2】
  6. android瀑布流简单实现原理
  7. 详解Android(安卓)getWidth和getMeasuredWidth
  8. Android(安卓)手机获取时区
  9. Eclipse 开发 Android, Hello FormStuff(学习9)

随机推荐

  1. MTK android配置LCD背光和LED,调试方法
  2. Android NDK HelloWorld配置(Eclipse)
  3. 22、Android之 使用手机的 GPS 功能
  4. android解析XML总结(SAX、Pull、Dom三种方
  5. Android API Guides---AIDL
  6. Android:Button同时设置OnLongClick、OnCl
  7. 代号Pie!Android 9.0那些开发者必须知道的
  8. 很容易理解的Android AsyncTask源码与工
  9. (转自魏祝林的博客)Android中几种图像特
  10. Android的进程回收