`
RandyWei
  • 浏览: 67105 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NDK遍历sdcard下面的目录(C代码实现,JNI)

 
阅读更多

  1. #include <jni.h>  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <string.h>  
  5. #include <dirent.h>  
  6. #include <time.h>  
  7. #include <android/log.h>  
  8.   
  9.   
  10. #define LOG_TAG "Test"  
  11. #define LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)  
  12. #define LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)  
  13.   
  14. #define PATHMAX 1024  
  15.   
  16. void searchdir(char *path);  
  17.   
  18. int total = 0;  
  19.   
  20.   
  21. void searchdir(char *path)  
  22. {  
  23.     DIR *dp;  
  24.     struct dirent *dmsg;  
  25.     int i=0;  
  26.     char addpath[PATHMAX] = {'\0'}, *tmpstr;  
  27.     if ((dp = opendir(path)) != NULL)  
  28.     {  
  29.       
  30.       while ((dmsg = readdir(dp)) != NULL)  
  31.       {  
  32.   
  33.         if (!strcmp(dmsg->d_name, ".") || !strcmp(dmsg->d_name, ".."))  
  34.             continue;  
  35.         strcpy(addpath, path);  
  36.         strcat(addpath, "/");  
  37.         strcat(addpath, dmsg->d_name);  
  38.         if (dmsg->d_type == DT_DIR )  
  39.         {  
  40.             char *temp;  
  41.             temp=dmsg->d_name;  
  42.             if(strchr(dmsg->d_name, '.'))  
  43.             {  
  44.                if((strcmp(strchr(dmsg->d_name, '.'), dmsg->d_name)==0))  
  45.                {  
  46.                  continue;  
  47.                }  
  48.             }  
  49.             LOGI("........directname:%s",dmsg->d_name);  
  50.             searchdir(addpath);  
  51.         }  
  52.       }  
  53.     }  
  54.     closedir(dp);     
  55. }  
  56.   
  57.   
  58. JNIEXPORT jfloat JNICALL Java_com_docintest_SimpleNdkActivity_getSecond  
  59.   (JNIEnv *env, jobject thiz)  
  60.   
  61. {  
  62.     clock_t   tick_start,tick_end;  
  63.     double t;  
  64.     char *dirpath="/mnt/sdcard/";  
  65.     LOGI("begin.................................................... function.");  
  66.     tick_start=clock();  
  67.     searchdir(dirpath);  
  68.     tick_end=clock();  
  69.     float dtime= (float)(tick_end-tick_start)/1000/1000;  
  70.     printf( "Total   time   used:%f   second\n ",dtime);  
  71.     return dtime;  
  72.   
  73. }  


 

上(C代码)

(下)JAVA 

 

 

 

  1. package com.docintest;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.widget.TextView;  
  6.   
  7. public class SimpleNdkActivity extends Activity {  
  8.     /** Called when the activity is first created. */  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.         TextView tv=(TextView)findViewById(R.id.second);  
  14.         tv.setText("Total time:"+getSecond()+"");  
  15.     }  
  16.       
  17.     private  native float  getSecond();  
  18.       
  19.     static {  
  20.         System.loadLibrary("test");  
  21.     }  
  22. }  

 

结果:

 

 


分享到:
评论

相关推荐

    NDK遍历sdcard简单实例(与java代码的速度对比)

    这个"NDK遍历sdcard简单实例"着重展示了如何利用NDK来遍历SD卡上的文件系统,并与Java代码进行速度对比,以体现原生代码的优势。 首先,我们要理解Android中的SD卡,即外部存储,通常用于存储用户数据和应用的大型...

    安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip

    安卓app开发之NDK入门教程,JAVA代码通过JNI接口调用NDK代码(C语言编写的linux android功能).zip

    NDK开发遍历手机文件,返回给java代码,MP3信息获取

    要实现这个功能,你需要在C或C++的JNI(Java Native Interface)中编写一个函数,该函数接收文件路径作为参数,然后遍历指定目录下的所有文件。对于每个文件,检查其扩展名是否为".mp3"。如果是,你可以读取其元数据...

    Android-ndk-jni AES加解密 C++

    1. **创建JNI接口**:首先,你需要在Java层定义JNI接口,这些接口将被C++代码实现。例如: ```java static { System.loadLibrary("aes"); } public native byte[] encryptAES(byte[] data, byte[] key); ...

    NDK JNI开发例子代码

    NDK(Native Development Kit)是Android平台提供的一套工具,允许开发者使用C和C++编写原生代码,以实现对Android应用的底层优化和高性能计算。JNI(Java Native Interface)是Java平台的一部分,它提供了与本地...

    NDK JNI开发例子代码2

    NDK(Native Development Kit)是Android平台提供的一套工具,用于让开发者在C或C++中编写原生代码,以实现高性能、低级别的系统访问。JNI(Java Native Interface)是Java平台的一部分,允许Java代码和其他语言写的...

    Ndk-Jni开发实战

    3. **本地代码实现**:在C/C++源文件中,我们根据JNI头文件实现本地函数。这些函数可以访问Java对象,调用Java方法,以及执行本地操作。 4. **编译与链接**:使用CMake或ndk-build工具,我们可以编译本地源代码生成...

    android-ndk-jni示例代码

    Android NDK和JNI是Android应用开发中的重要工具,它们允许开发者使用C++或者其他原生语言编写部分代码,以实现性能优化、利用硬件加速或者集成已有的C/C++库。本示例代码“android-ndk-jni”是针对这一主题的具体...

    NDK JNI的学习

    NDK(Native Development Kit)是Android开发中的一个重要工具集,它允许开发者在Android应用中使用C/C++代码,从而利用底层的性能优化和硬件访问能力。JNI(Java Native Interface)是Java平台的一部分,提供了一个...

    Android Studio JNI/NDK 编程

    通过以上知识,开发者可以充分利用Android Studio和JNI/NDK的优势,提升应用的性能,实现跨语言的代码复用,以及接入各种C/C++库,比如OpenCV、FFmpeg等。在实际项目中,应谨慎使用NDK,因为本地代码会增加应用的...

    Android NDK编程首个程序hello-jni

    - `jni` 目录:这是NDK开发的核心部分,包含C/C++源代码文件。在hello-jni中,主要的源文件是`HelloJNI.c`。 - `Android.mk` 或 `CMakeLists.txt`:构建脚本,用于指示NDK如何编译源代码。在早期版本的NDK中,通常...

    Android JNI层实现扫描sd卡mp3文件

    4. **JNI函数定义**:在Java层,我们需要定义一个native方法,声明它将被C/C++代码实现。例如: ```java public native void scanSdCardForMp3s(); ``` 并使用`System.loadLibrary("jniscanner")`加载对应的.so...

    Android Studio NDK JNI配置Demo代码 2016

    Android Studio是一款强大的Android应用程序开发工具,它不仅支持Java语言,还允许开发者使用原生代码(C/C++)进行开发,这就是所谓的Android NDK。JNI(Java Native Interface)是Java平台的标准部分,用于让Java...

    Android中JNI实现AES加密源代码

    1. **创建本地方法接口**:在Java层定义本地方法,这些方法将被C或C++代码实现。例如,你可能会有一个`encrypt()`和`decrypt()`方法声明。 2. **编写JNI头文件**:使用`javah`工具自动生成C/C++的头文件,这个...

    安卓中实现jni读取内存信息

    在Android系统中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互,比如C++。JNI在很多场景下都非常有用,例如提高性能、调用操作系统底层功能,以及本例中的读取内存...

    android studio中使用ndk编译.so文件,调用C/C++代码(jni编程)

    下面我们将详细介绍如何在Android Studio中使用NDK编译.so文件以及调用C/C++代码的过程。 首先,我们需要在Android Studio中设置NDK路径。这通常在项目的build.gradle文件中的`externalNativeBuild`块内完成,通过...

    JNI NDK 开发指南

    2. **编写本地代码**:根据生成的头文件,编写C/C++代码实现本地方法。这部分代码通常包含在`.c`或`.cpp`文件中,并链接到Android系统的JNI库。 3. **构建本地库**:使用NDK提供的构建工具(如`ndk-build`或CMake)...

    Android ndk jni 史上最强NDK入门项目实战

    在移动开发领域,Android NDK(Native Development Kit)和JNI(Java Native Interface)是开发者用来实现高性能计算、利用硬件加速或调用C/C++库的重要工具。本指南将深入浅出地介绍这两个概念,通过实际项目实战,...

    NDK与JNI基础演示源码

    在Android开发中,JNI(Java Native Interface)和NDK(Native Development Kit)是两个关键的组件,用于实现Java代码与本地C/C++代码之间的交互。本项目“NDK与JNI基础演示源码”是一个基于Android Studio 3.0的...

    ndk jni实例源码

    在Android开发中,NDK(Native Development Kit)和JNI(Java Native Interface)是两个非常重要的概念,它们允许开发者使用C/C++等原生代码来编写部分应用,从而提高性能、优化计算密集型任务或者利用已有的C/C++库...

Global site tag (gtag.js) - Google Analytics