Native开发工具之AS构建NDK项目(六,爆火的Android面试题

…\build\intermediates\classes\debug 这个路径如图所示:

example.user.ndkdemo2.NDK就是NDKclass的路径名。

执行完这个命令后,会在main文件夹下自动生成jni目录和.h头文件。

可以打头文件看看:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class example_user_ndkdemo2_NDK */

#ifndef _Included_example_user_ndkdemo2_NDK
#define _Included_example_user_ndkdemo2_NDK
#ifdef __cplusplus
extern "C" {
#endif
#undef example_user_ndkdemo2_NDK_BIND_ABOVE_CLIENT
#define example_user_ndkdemo2_NDK_BIND_ABOVE_CLIENT 8L
#undef example_user_ndkdemo2_NDK_BIND_ADJUST_WITH_ACTIVITY
#define example_user_ndkdemo2_NDK_BIND_ADJUST_WITH_ACTIVITY 128L
#undef example_user_ndkdemo2_NDK_BIND_ALLOW_OOM_MANAGEMENT
#define example_user_ndkdemo2_NDK_BIND_ALLOW_OOM_MANAGEMENT 16L
#undef example_user_ndkdemo2_NDK_BIND_AUTO_CREATE
#define example_user_ndkdemo2_NDK_BIND_AUTO_CREATE 1L
#undef example_user_ndkdemo2_NDK_BIND_DEBUG_UNBIND
#define example_user_ndkdemo2_NDK_BIND_DEBUG_UNBIND 2L
#undef example_user_ndkdemo2_NDK_BIND_IMPORTANT
#define example_user_ndkdemo2_NDK_BIND_IMPORTANT 64L
#undef example_user_ndkdemo2_NDK_BIND_NOT_FOREGROUND
#define example_user_ndkdemo2_NDK_BIND_NOT_FOREGROUND 4L
#undef example_user_ndkdemo2_NDK_BIND_WAIVE_PRIORITY
#define example_user_ndkdemo2_NDK_BIND_WAIVE_PRIORITY 32L
#undef example_user_ndkdemo2_NDK_CONTEXT_IGNORE_SECURITY
#define example_user_ndkdemo2_NDK_CONTEXT_IGNORE_SECURITY 2L
#undef example_user_ndkdemo2_NDK_CONTEXT_INCLUDE_CODE
#define example_user_ndkdemo2_NDK_CONTEXT_INCLUDE_CODE 1L
#undef example_user_ndkdemo2_NDK_CONTEXT_RESTRICTED
#define example_user_ndkdemo2_NDK_CONTEXT_RESTRICTED 4L
#undef example_user_ndkdemo2_NDK_MODE_APPEND
#define example_user_ndkdemo2_NDK_MODE_APPEND 32768L
#undef example_user_ndkdemo2_NDK_MODE_ENABLE_WRITE_AHEAD_LOGGING
#define example_user_ndkdemo2_NDK_MODE_ENABLE_WRITE_AHEAD_LOGGING 8L
#undef example_user_ndkdemo2_NDK_MODE_MULTI_PROCESS
#define example_user_ndkdemo2_NDK_MODE_MULTI_PROCESS 4L
#undef example_user_ndkdemo2_NDK_MODE_PRIVATE
#define example_user_ndkdemo2_NDK_MODE_PRIVATE 0L
#undef example_user_ndkdemo2_NDK_MODE_WORLD_READABLE
#define example_user_ndkdemo2_NDK_MODE_WORLD_READABLE 1L
#undef example_user_ndkdemo2_NDK_MODE_WORLD_WRITEABLE
#define example_user_ndkdemo2_NDK_MODE_WORLD_WRITEABLE 2L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_DIALER
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_DIALER 1L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_DISABLE
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_DISABLE 0L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_GLOBAL
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_GLOBAL 4L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_LOCAL
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_LOCAL 3L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SHORTCUT
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SHORTCUT 2L
#undef example_user_ndkdemo2_NDK_RESULT_CANCELED
#define example_user_ndkdemo2_NDK_RESULT_CANCELED 0L
#undef example_user_ndkdemo2_NDK_RESULT_FIRST_USER
#define example_user_ndkdemo2_NDK_RESULT_FIRST_USER 1L
#undef example_user_ndkdemo2_NDK_RESULT_OK
#define example_user_ndkdemo2_NDK_RESULT_OK -1L
#undef example_user_ndkdemo2_NDK_MAX_NUM_PENDING_FRAGMENT_ACTIVITY_RESULTS
#define example_user_ndkdemo2_NDK_MAX_NUM_PENDING_FRAGMENT_ACTIVITY_RESULTS 65534L
#undef example_user_ndkdemo2_NDK_HONEYCOMB
#define example_user_ndkdemo2_NDK_HONEYCOMB 11L
#undef example_user_ndkdemo2_NDK_MSG_REALLY_STOPPED
#define example_user_ndkdemo2_NDK_MSG_REALLY_STOPPED 1L
#undef example_user_ndkdemo2_NDK_MSG_RESUME_PENDING
#define example_user_ndkdemo2_NDK_MSG_RESUME_PENDING 2L
/*
 * Class:     example_user_ndkdemo2_NDK
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_example_user_ndkdemo2_NDK_getStringFromNative
  (JNIEnv *, jobject);

/*
 * Class:     example_user_ndkdemo2_NDK
 * Method:    getString_From_c
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_example_user_ndkdemo2_NDK_getString_1From_1c
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

这个文件中:JNIEXPORT jstring JNICALL Java_example_user_ndkdemo2_NDK_getStringFromNative(JNIEnv *, jobject);这是函数定义,Java_<packege_path><class_name><method_name>(JNIEnv *, jobject,<parameter_list>);

函数定义中这两个参数:JNIEnv *, jobject是必须的,之后才是需要在函数调用时需要传递的参数,如:

Java_<packege_path><class_name><method_name>(JNIEnv *, jint value1,jint value2);//jint是什么意思,在后边说明。jint就是代表的Java里的int类型。

四,创建C文件,实现native方法

在jni目录下建立c文件:util.c是一个空文件,这是因为NDK在windows系统上的一个bug,没有会出错,你也可以不建,如果出错再建也没事。
c文件:

#include "example_user_ndkdemo2_NDK.h"
//#include <android/log.h>
//#define  LOG_TAG  "System.out"
//#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG,  __VA_ARGS__)
//#define LOGINFO(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,  __VA_ARGS__)


JNIEXPORT jstring JNICALL Java_example_user_ndkdemo2_NDK_getStringFromNative
        (JNIEnv * env, jobject jobject){
   // LOGINFO("LOGINFO");
    return (*env)->NewStringUTF(env,"NDK 测试成功");
}

JNIEXPORT jstring JNICALL Java_example_user_ndkdemo2_NDK_getString_1From_1c
## 推荐学习资料

* Android进阶学习全套手册

  ![](https://img-blog.csdnimg.cn/img_convert/950effc01c9cb7eb80e119b7e58fd187.png)

* Android对标阿里P7学习视频

  ![](https://img-blog.csdnimg.cn/img_convert/0d3e2b1997ec04232722a60cc354849e.png)

* BAT TMD大厂Android高频面试题

![](https://img-blog.csdnimg.cn/img_convert/e9996c073579a3ab270f11861262d61f.png)

droid对标阿里P7学习视频

  [外链图片转存中...(img-U5aYdRp3-1630936231218)]

* BAT TMD大厂Android高频面试题

[外链图片转存中...(img-ZhsFZ9ut-1630936231219)]

**[CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》](https://codechina.csdn.net/m0_60958482/android_p7)**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值