Android Studio下Java Jni技术

最近开发Android的过程中需要通过C来调用Android终端中的某些API,而我是用JAVA语言来开发的Android程序,所以就需要用到JNI调用。

流程是,用C来调用Android硬件接口,约定JAVA调用C的接口,然后把这些代码封装编译成.so文件。然后就是怎么引入与调用了。

1、将.so文件加入到libs目录下,.so文件命名规范为lib*,lib后加上名字。

2、加入jniLibs路径配置,在build.gradle中加入如下配置:

android {
    ……
    sourceSets {
        main {
            jniLibs.srcDirs = [‘libs‘]
        }
    }
}

3、JAVA调用

public class UspJni
{
   private final static String    TAG    = "USPJNI";
   
   static
   {
      try{
         System.loadLibrary("uspjni");//加载libuspjni.so 
         Log.d(TAG, "libuspjni.so load");
      }catch(Exception e){
         System.err.println("Native code library failed to load.\n"+e);
      }
   }
   
   public static UspJni getInstance()
   {
      if (jni == null)
      {
         jni = new UspJni();
      }
      
      return jni;
   }
   
   public int uartOpen(String path, int flags)
   {
      Log.d(TAG, "(uartOpen)path=" + path + ",flags=" + String.valueOf(flags));
      
      uartFd = this.open(path, flags);
      
      if (uartFd < 0)
      {
         Log.d(TAG, "(uartOpen)failed" + ",uartFd=" + String.valueOf(uartFd));
      }
      
      return uartFd;
   }
   
   public int uartClose()
   {
      Log.d(TAG, "(uartClose)");
      
      int status = this.close(uartFd);
      uartFd = -1;
      
      if (status != 0)
      {
         Log.d(TAG, "(uartClose)failed,status=" + String.valueOf(status)
               + ",uartFd=" + uartFd);
      }
      
      return status;
   }
   
   public byte[] uartRead(int timeout)
   {
      Log.d(TAG, "(uartRead)timeout=" + timeout);
      
      byte[] buff = this.read(uartFd,timeout);
      
      if (buff==null)
      {
         return new byte[0];
      }
      
      Log.d(TAG, "(uartRead)len=" + buff.length);
      return buff;
   }
   
   public int uartFlush()
   {
      Log.d(TAG, "(uartFlush)");
      
      byte[] data;
      
      do
      {
         data = UspJni.getInstance().uartRead(50);//调用
      }while(data.length>0);
      
      return 0;
      
   }
   
   public native int gpioSetStatus(int ioId, int status);
   public native int gpioGetStatus(int ioId);
   
   private native int open(String path, int flags);
   
   private native int close(int fd);
   
   private native byte[] read(int fd,int timeout);
   
   private native int write(int fd, byte[] data, int count);
   
   private static UspJni  jni;
   
   private UspJni()
   {  
      
   }
}
时间: 2024-10-08 17:15:48

Android Studio下Java Jni技术的相关文章

【android 开 发 】 - Android studio 下 NDK Jni 开发 简单例子

Android 开发了一段时间,一方面 ,感觉不留下点什么.有点对不起自己, 另一方面,好记性不如烂笔头,为了往后可以回头来看看,就当做是笔记,便决定开始写博客.废话不多说 ! 今天想搞一搞 ndk 和jni  ,, 现在开始写一个简单的demo  1. 创建一个新的工程 2. 创建一个新的类 JniText.java  点击Build--Make Project  后     选中工程 点击F4键 sdk location 中 Android ndk location 选择配置ndk 的路径 

Android Studio 下进行jni开发及打包方法

最近几天查找了好多关于Android Studio开发JNI资料的资料,但是一直编译不成功!原因可能是和Android Studio的最新版本有关,或者多数都是使用Eclipse进行Android JNI 开发的,不适用Android Studio 吧! 首先介绍我的开发环境: 操作系统:Ubuntu Kylin15.04 32位 开发工具:Android Studio JDK版本: java version "1.7.0_79" OpenJDK Runtime Environment

android studio下生成jni头文件

cd app/src/main javah -d jni -classpath ../../build/intermediates/classes/debug net.sourceforge.lame.Lame 头文件 net_sourceforge_lame_Lame.h 会放在app/src/main/jni目录下

Android Studio下jni应用

最近在将一个小应用从eclipse开发迁移到android studio,程序中有native代码实现,在eclipse是靠Android.mk这么个mk文件来组织编译的,但到android studio上就不行了,因其是靠gradle组织,所以makefile里的配置要转换为build.gradle里的语句(尽管实际上gradle也是组织一个mk文件),同时在迁移过程中遇到了一些问题,这里记录一下,以备后查. Android的JNI开发主要有两中情况:一种是使用已经编译好的.so动态库:一种是

11.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案。

<span style="font-family: Arial, Helvetica, sans-serif;">步骤一:导入JniHelper.h头文件.</span> #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include "JniHelper.h" #endif: 此时会遇到JniHelper.h头文件无法找到的问题,需要添加附加包含目录即可解决问题.具体操作步骤如下:右击项目-

Android Studio下Android应用开发集成百度语音合成使用方法样例

转载请注明来源: http://blog.csdn.net/kjunchen/article/details/51093134 Android Studio下Android应用开发集成百度语音合成使用方法样例 首先,语音合成是指将文本信息转换成声音.意思就是将文本转化为声音,让你的应用开口说话.国内在业内比较有名的第三方语音合成平台有百度语音和科大讯飞. 本博文集成的是百度语音合成,其主要特点是: 完全永久免费 业界首创完全永久免费新形式,为开发者提供最流畅最自然的语音合成服务.完全免费,永久使

Android Studio下的应用性能优化总结-内存优化

转载请标明出处(请勿转载删除底部微博.微信等信息): http://blog.csdn.net/Y1258429182/article/details/51176424 本文出自:杨哲丶的博客 上一篇文章总结的布局优化的问题,如果对布局优化不是很熟悉的,可以看一下Android Studido下的应用性能优化总结–布局优化, 这周一直筹划总结一下内存优化的问题,因为现在对于应用优化的文章很多,但是还是想完善一下才想分享这篇文章的,我会从项目中遇到的一个问题,通过解决问题的过程来分享知识,希望大家

Android studio 下的robotium自动化测试和持续集成

一.前言 Android Studio是一个Android开发环境,基于IntelliJ IDEA.类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试.作为官方主推的开发环境和停止对其他开发IDE的支持,Android Studio将成为今后唯一的android开发环境.本文主要介绍在Android Studio环境下的Robotium测试框架使用方法和持续集成. 二.在Android Studio中使用Robotium 2.1基础环

Android Studio下项目构建的Gradle配置及打包应用变体

Gradle简介 ??Gradle是一个自动化构建工具,采用Groovy的Domain Specific Language(领域特定语言)来描述和控制构建逻辑.具有语法简洁.可读性强.配置灵活等特点.基于Intellij IDEA社区版本开发的Android Studio天生支持Gradle构建程序.Groovy是一种基于JVM的敏捷开发语言,结合了Phthon.Ruby和Smalltalk的许多强大特性.同时,Groovy代码既能够与java代码很好地结合,也能够用于扩展现有的代码. Grad