`
quanminchaoren
  • 浏览: 926137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Android JNI 编程常见小问题

阅读更多
extern "C" {
jint
Java_com_cmcc_media_MicphoneService_setMicVolume(JNIEnv * jEnv, jobject jobj, jint volume)
{
   ...
}

cpp文件中如果不添加 extern "C" {}的话可能会导致java link lib error;

jstring 转string:
static char* jstring2string(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;

jclass clsstring = (*env)->FindClass(env, "java/lang/String");

jstring strencode = (*env)->NewStringUTF(env, "utf-8");
jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");
jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode);
jsize alen = (*env)->GetArrayLength(env, barr);
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);

if(alen > 0)
{
rtn = (char*)malloc(alen + 1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}

(*env)->ReleaseByteArrayElements(env, barr, ba, 0);

return rtn;
}

或者
char* bytes = const_cast< char* > (env->GetStringUTFChars(string, NULL));
用完后 env->ReleaseStringUTFChars(string, bytes);


string转jstring:
static jstring string2jstring(JNIEnv* env, const char* pat)
{
       jclass strClass = (*env)->FindClass(env, "java/lang/String");
       jmethodID ctorID = (*env)->GetMethodID(env, strClass, "<init>", "([BLjava/lang/String;)V");
       jbyteArray bytes = (*env)->NewByteArray(env, strlen(pat));
       (*env)->SetByteArrayRegion(env, bytes, 0, strlen(pat), (jbyte*)pat);
       jstring encoding = (*env)->NewStringUTF(env, "utf-8");
       return (jstring)(*env)->NewObject(env, strClass, ctorID, bytes, encoding);
}

String16转String8:
String16 value;
String8 propvalue(value);
分享到:
评论

相关推荐

    Android中JNI编程的那些事儿

    这篇博文“Android中JNI编程的那些事儿”可能涵盖了JNI的基础知识、使用技巧以及常见问题。 1. JNI基础知识: - JNI接口定义:JNI提供了一系列的函数接口,使得Java和本地代码可以互相调用。 - JNIEnv指针:...

    JNI编程指南书

    ### JNI编程指南书知识点概述 #### 一、JNI的基本概念及应用场景 JNI(Java Native Interface)作为Java平台的重要组成部分,其核心价值在于能够使Java程序有效地利用现有的C/C++代码,进而实现性能优化或功能扩展...

    android JNI开发演示(串口收发)

    Android JNI(Java Native Interface)开发是一种技术,允许Java代码与其他编程语言(如C++或C)编写的代码进行交互。这种交互通常是出于性能考虑,因为原生代码在处理密集型计算或系统级操作时通常比Java更高效。在...

    android_jni.rar_android_android_jni

    这个"android_jni.rar"压缩包提供了一份关于Android JNI编程的基本文档,对想要深入学习Android底层开发的朋友们来说,是一份非常有价值的参考资料。 1. **JNI简介**: JNI是Java平台的一部分,为Java程序员提供了...

    Android JNI开发手册

    在深入了解JNI编程之后,手册讨论了如何在C/C++代码中调用Java,包括环境搭建、初始化虚拟机、访问Java类的方法和属性等。这部分内容对于理解JNI在Java和本地代码之间桥接作用尤为重要。 手册还深入到了JNI调用技术...

    Jni编程技术

    ### Jni编程技术知识点概述 #### 一、JNI的基本概念及应用场景 JNI(Java Native Interface)是一种标准,允许Java代码和其他语言(如C/C++)编写的代码进行交互。主要应用场景包括: - **复用已有C/C++代码**:...

    leds-JNI.rar_Android jni_android

    同时,这个头文件也可能包含了JNI的预定义宏,如`JNIEXPORT`和`JNIEnv *`,这些都是JNI编程中的关键元素,用于指示函数的返回类型和处理Java虚拟机(JVM)的指针。 在Android系统中,JNI可以访问Linux内核提供的API...

    Android JNI图像处理经典例子

    通过这种方式,开发者能够提升应用的性能,尤其是在处理大量图像数据时,同时还能深入理解Android的跨语言编程。对于任何对Android NDK和JNI感兴趣的开发者来说,这都是一个极具价值的参考资料。

    Android jni 高斯模糊效果

    JNI是Android平台提供的一种机制,允许Java代码与其他编程语言(如C/C++)进行交互。它提供了一组接口,使得Java层可以调用C/C++的函数,反之亦然。通过JNI,开发者可以在性能关键的部分使用更底层的语言,从而提高...

    android下JNI使用方法

    此外,JNI编程需要对C/C++和Java的混合编程有深入理解,这增加了开发的复杂性。 在实际开发中,为了简化JNI的使用,可以利用一些框架,如Android NDK(Native Development Kit),它提供了一套工具和库,使得在...

    android jni开发串口助手

    总之,Android JNI开发串口助手涉及了Android应用开发、JNI接口设计、C/C++编程、Linux串口通信等多个技术领域,通过这个项目,开发者可以深入理解Android系统底层的工作原理以及跨语言编程的实践。

    android jni 环境搭建 开发

    Android JNI(Java Native Interface)是Java编程语言与C/C++代码交互的一种机制。它允许Java应用程序调用本地方法,即预先用C/C++编写的功能,从而实现对底层硬件的高效访问或利用已有的C/C++库。JNI在Android开发...

    JNI编程指南.zip

    - **JNI编程指南.doc**:这份文档可能详细介绍了JNI的原理、使用方法、最佳实践以及常见问题的解决,是学习和理解JNI的关键资料。 5. **安卓毕业设计和课程设计**: - JNI技术可以应用于各种项目,例如开发一个...

    Android学习笔记含JNI、USB和ftdi通信方式详解

    通过这些项目的实践,可以深入了解Android开发中的关键技术点,如多线程、自定义UI组件、网络通信、JNI编程以及串口通信等。这些技能对于从事Android开发的专业人士来说是非常宝贵的。此外,项目中提到的一些具体...

    android JNI 开发演示(串口收发)

    Android JNI(Java Native Interface)开发是一种技术,允许Java代码与其他编程语言(如C++或C)交互。在本示例中,JNI被用于实现串口通信功能,这在物联网(IoT)设备、嵌入式系统或者需要低级别硬件交互的应用中非常...

    Andriod_JNI.zip_andriod Jni_android_android Native JNI_android f

    - 转换数据类型是JNI编程中常见的操作,需要熟悉这些映射以便正确地传递参数和返回值。 6. **JNI回调和事件处理**: - 通过JNI,可以在本地代码中注册回调函数,当Java端触发特定事件时,这些函数会被调用。 - ...

    Android 6.0 AS平台 JNI 实验

    Android 6.0 平台上使用Android Studio (AS) 进行JNI开发是一个常见的实践,JNI(Java Native Interface)允许Java代码与其他编程语言(如C++)进行交互,以利用其性能优势或调用特定库。这个实验将带你了解如何在...

    android jni高斯模糊for Eclipse

    在Android开发中,JNI(Java Native Interface)是一种技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常...此外,对于希望提升图像处理性能或对JNI编程感兴趣的开发者,这是一个极好的学习资源。

    libandroidjni,android jni绑定库.zip

    总结,libandroidjni库是Android开发者用来简化JNI编程的一个工具,它可能包含了一系列预定义的函数和类,使得与本地代码的交互变得更加容易。对于希望在Android应用中利用C/C++代码的开发者来说,理解和掌握这个库...

    jni获取Android设备MAC Address最完美解决方案

    在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他编程语言编写的代码进行交互。JNI在很多场景下被用到,比如优化性能、调用系统底层功能或者利用C/C++库。本解决方案主要针对如何通过...

Global site tag (gtag.js) - Google Analytics