- #include <jni.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <dirent.h>
- #include <time.h>
- #include <android/log.h>
-
-
- #define LOG_TAG "Test"
- #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
- #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
-
- #define PATHMAX 1024
-
- void searchdir(char *path);
-
- int total = 0;
-
-
- void searchdir(char *path)
- {
- DIR *dp;
- struct dirent *dmsg;
- int i=0;
- char addpath[PATHMAX] = {'\0'}, *tmpstr;
- if ((dp = opendir(path)) != NULL)
- {
-
- while ((dmsg = readdir(dp)) != NULL)
- {
-
- if (!strcmp(dmsg->d_name, ".") || !strcmp(dmsg->d_name, ".."))
- continue;
- strcpy(addpath, path);
- strcat(addpath, "/");
- strcat(addpath, dmsg->d_name);
- if (dmsg->d_type == DT_DIR )
- {
- char *temp;
- temp=dmsg->d_name;
- if(strchr(dmsg->d_name, '.'))
- {
- if((strcmp(strchr(dmsg->d_name, '.'), dmsg->d_name)==0))
- {
- continue;
- }
- }
- LOGI("........directname:%s",dmsg->d_name);
- searchdir(addpath);
- }
- }
- }
- closedir(dp);
- }
-
-
- JNIEXPORT jfloat JNICALL Java_com_docintest_SimpleNdkActivity_getSecond
- (JNIEnv *env, jobject thiz)
-
- {
- clock_t tick_start,tick_end;
- double t;
- char *dirpath="/mnt/sdcard/";
- LOGI("begin.................................................... function.");
- tick_start=clock();
- searchdir(dirpath);
- tick_end=clock();
- float dtime= (float)(tick_end-tick_start)/1000/1000;
- printf( "Total time used:%f second\n ",dtime);
- return dtime;
-
- }
上(C代码)
(下)JAVA
- package com.docintest;
-
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
-
- public class SimpleNdkActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- TextView tv=(TextView)findViewById(R.id.second);
- tv.setText("Total time:"+getSecond()+"");
- }
-
- private native float getSecond();
-
- static {
- System.loadLibrary("test");
- }
- }
结果:
分享到:
相关推荐
这个"NDK遍历sdcard简单实例"着重展示了如何利用NDK来遍历SD卡上的文件系统,并与Java代码进行速度对比,以体现原生代码的优势。 首先,我们要理解Android中的SD卡,即外部存储,通常用于存储用户数据和应用的大型...
安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip
要实现这个功能,你需要在C或C++的JNI(Java Native Interface)中编写一个函数,该函数接收文件路径作为参数,然后遍历指定目录下的所有文件。对于每个文件,检查其扩展名是否为".mp3"。如果是,你可以读取其元数据...
1. **创建JNI接口**:首先,你需要在Java层定义JNI接口,这些接口将被C++代码实现。例如: ```java static { System.loadLibrary("aes"); } public native byte[] encryptAES(byte[] data, byte[] key); ...
NDK(Native Development Kit)是Android平台提供的一套工具,允许开发者使用C和C++编写原生代码,以实现对Android应用的底层优化和高性能计算。JNI(Java Native Interface)是Java平台的一部分,它提供了与本地...
NDK(Native Development Kit)是Android平台提供的一套工具,用于让开发者在C或C++中编写原生代码,以实现高性能、低级别的系统访问。JNI(Java Native Interface)是Java平台的一部分,允许Java代码和其他语言写的...
3. **本地代码实现**:在C/C++源文件中,我们根据JNI头文件实现本地函数。这些函数可以访问Java对象,调用Java方法,以及执行本地操作。 4. **编译与链接**:使用CMake或ndk-build工具,我们可以编译本地源代码生成...
Android NDK和JNI是Android应用开发中的重要工具,它们允许开发者使用C++或者其他原生语言编写部分代码,以实现性能优化、利用硬件加速或者集成已有的C/C++库。本示例代码“android-ndk-jni”是针对这一主题的具体...
NDK(Native Development Kit)是Android开发中的一个重要工具集,它允许开发者在Android应用中使用C/C++代码,从而利用底层的性能优化和硬件访问能力。JNI(Java Native Interface)是Java平台的一部分,提供了一个...
通过以上知识,开发者可以充分利用Android Studio和JNI/NDK的优势,提升应用的性能,实现跨语言的代码复用,以及接入各种C/C++库,比如OpenCV、FFmpeg等。在实际项目中,应谨慎使用NDK,因为本地代码会增加应用的...
- `jni` 目录:这是NDK开发的核心部分,包含C/C++源代码文件。在hello-jni中,主要的源文件是`HelloJNI.c`。 - `Android.mk` 或 `CMakeLists.txt`:构建脚本,用于指示NDK如何编译源代码。在早期版本的NDK中,通常...
4. **JNI函数定义**:在Java层,我们需要定义一个native方法,声明它将被C/C++代码实现。例如: ```java public native void scanSdCardForMp3s(); ``` 并使用`System.loadLibrary("jniscanner")`加载对应的.so...
Android Studio是一款强大的Android应用程序开发工具,它不仅支持Java语言,还允许开发者使用原生代码(C/C++)进行开发,这就是所谓的Android NDK。JNI(Java Native Interface)是Java平台的标准部分,用于让Java...
1. **创建本地方法接口**:在Java层定义本地方法,这些方法将被C或C++代码实现。例如,你可能会有一个`encrypt()`和`decrypt()`方法声明。 2. **编写JNI头文件**:使用`javah`工具自动生成C/C++的头文件,这个...
在Android系统中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互,比如C++。JNI在很多场景下都非常有用,例如提高性能、调用操作系统底层功能,以及本例中的读取内存...
下面我们将详细介绍如何在Android Studio中使用NDK编译.so文件以及调用C/C++代码的过程。 首先,我们需要在Android Studio中设置NDK路径。这通常在项目的build.gradle文件中的`externalNativeBuild`块内完成,通过...
2. **编写本地代码**:根据生成的头文件,编写C/C++代码实现本地方法。这部分代码通常包含在`.c`或`.cpp`文件中,并链接到Android系统的JNI库。 3. **构建本地库**:使用NDK提供的构建工具(如`ndk-build`或CMake)...
在移动开发领域,Android NDK(Native Development Kit)和JNI(Java Native Interface)是开发者用来实现高性能计算、利用硬件加速或调用C/C++库的重要工具。本指南将深入浅出地介绍这两个概念,通过实际项目实战,...
在Android开发中,JNI(Java Native Interface)和NDK(Native Development Kit)是两个关键的组件,用于实现Java代码与本地C/C++代码之间的交互。本项目“NDK与JNI基础演示源码”是一个基于Android Studio 3.0的...
在Android开发中,NDK(Native Development Kit)和JNI(Java Native Interface)是两个非常重要的概念,它们允许开发者使用C/C++等原生代码来编写部分应用,从而提高性能、优化计算密集型任务或者利用已有的C/C++库...