-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_int
-
Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1int
(JNIEnv *, jobject, jint, jint);
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_boolean
-
Signature: (Z)Z
*/
JNIEXPORT jboolean JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1boolean
(JNIEnv *, jobject, jboolean);
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_string_params
-
Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1string_1params
(JNIEnv *, jclass, jstring, jstring);
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_array
-
Signature: ([I)V
*/
JNIEXPORT void JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1array
(JNIEnv *, jobject, jintArray);
#ifdef __cplusplus
}
#endif
#endif
test.cpp
#include<jni.h>
#include <android/log.h>
//导入我们创建的头文件
#include “com_ldw_jnitest_JniDataUtil.h”
#ifdef __cplusplus
extern “C” {
#endif
//自定义方法
void JNI_show()
{
__android_log_print(ANDROID_LOG_ERROR,“jni_show”, “Function from test.cpp=====JNI_show()”);
return;
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_void
-
Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1void
(JNIEnv * env, jobject obj)
{
JNI_show();
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_string
-
Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1string
(JNIEnv * env, jclass obj)
{
return env->NewStringUTF(“Function from test.cpp=====jni_string()”);
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_int
-
Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1int
(JNIEnv * env, jobject obj, jint jni_a, jint jni_b)
{
int a = (int) jni_a;
int b = (int) jni_b;
__android_log_print(ANDROID_LOG_ERROR,“jni_show”, “JNI: a = %d, b = %d”, a, b);
int c = 20;
return (jint)c;
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_boolean
-
Signature: (Z)Z
*/
JNIEXPORT jboolean JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1boolean
(JNIEnv * env, jobject obj, jboolean jni_b)
{
//JNI_TRUE JNI_FALSE
bool arg_bool = (jni_b == JNI_TRUE)?true:false;
__android_log_print(ANDROID_LOG_ERROR,“jni_show”, “JNI: bool = %s”,
((arg_bool == true) ? “true”:“false”));
return (arg_bool == true)?JNI_TRUE:JNI_FALSE;
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_string_params
-
Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1string_1params
(JNIEnv * env, jclass cla, jstring jni_str1, jstring jni_str2)
{
//jstring — >char*
const char *c_str1 = NULL;
const char *c_str2 = NULL;
//将java中的字符串转换成char*类型
c_str1 = env->GetStringUTFChars(jni_str1, 0);
__android_log_print(ANDROID_LOG_ERROR,“testjni”, “JNI: c_str1 = %s”,c_str1);
//释放java传递过来jstring里面的在堆上开辟的字符串空间
env->ReleaseStringUTFChars(jni_str1, c_str1);
c_str2 = env->GetStringUTFChars(jni_str2, 0);
__android_log_print(ANDROID_LOG_ERROR,“testjni”, “JNI: c_str2 = %s”,c_str2);
env->ReleaseStringUTFChars(jni_str2, c_str2);
//给java返回一个字符串
jstring ret_j_string = env->NewStringUTF(“JNI return String jni_string_params(String str1, String str2)”);
return ret_j_string;
}
/*
-
Class: com_ldw_jnitest_JniDataUtil
-
Method: jni_array
-
Signature: ([I)V
*/
JNIEXPORT void JNICALL Java_com_ldw_jnitest_JniDataUtil_jni_1array
(JNIEnv * env, jobject, jintArray jni_int_array)
{
//获取java中 jni_int_array数组的首地址
jint *pia = env->GetIntArrayElements(jni_int_array, 0);
//得到数组的长度
jsize array_len = env->GetArrayLength(jni_int_array);
//使用该pia pia[1] pia[2]
for (int i = 0; i < array_len; i++) {
__android_log_print(ANDROID_LOG_ERROR,“testjni”, “JNI:array[%d]:%d”,i, (int)pia[i]);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
资源分享
- 最新大厂面试专题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
- 对应导图的Android高级工程师进阶系统学习视频
最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!
,可以添加下面V无偿领取!(备注Android)**
[外链图片转存中…(img-hR7PVhWt-1711279119901)]
资源分享
- 最新大厂面试专题
这个题库内容是比较多的,除了一些流行的热门技术面试题,如Kotlin,数据库,Java虚拟机面试题,数组,Framework ,混合跨平台开发,等
[外链图片转存中…(img-nhTqyE8h-1711279119901)]
- 对应导图的Android高级工程师进阶系统学习视频
最近热门的,NDK,热修复,MVVM,源码等一系列系统学习视频都有!
[外链图片转存中…(img-IXrZYVHs-1711279119902)]
下载方法:点赞+关注后 点击【Android高级工程师进阶学习】即可领取!