Firefly开源社区

打印 上一主题 下一主题

Android JNI 环境搭建和通信实现

433

积分

3

威望

0

贡献

技术达人

Rank: 2

积分
433

Android JNI 环境搭建和通信实现

发表于 2017-6-27 09:47:11      浏览:7645 | 回复:1        打印      只看该作者   [复制链接] 楼主
本帖最后由 z3j6w9 于 2017-6-27 09:59 编辑

        前些日子写了一些驱动,然后就想着通过安卓程序来控制一下,在论坛搜了下jni实现的案例,没怎么看懂,然后就开始了漫长的百度之旅。     
         从我搞jni的过程来看,jni的环境真的是好麻烦(我是在windows上搞的,不知道linux上会不会简单点)。讲一下我参考的文档和遇到的坑,供新手们参考和借鉴,链接如下:
1.http://www.2cto.com/kf/201502/377185.html   eclipse下的安卓jni开发,讲了jni环境的配置,有部分小坑,会在后续说明
2.http://blog.csdn.net/kwiner/article/details/6250021   ndk环境的配置
3.http://www.cnblogs.com/smyhvae/p/4375710.html  安卓button的使用示例,由于本人不会安卓,所以代码基本百度,还好学过一点面向对象语言,虽然不会写,看还是看得懂的。

关于遇到的一点小坑:
1.在java中调用jni,链接1中使用的方式为
static {
System.load("TestJNI");
}

我尝试了下,提示找不到,然后做了一点修改,修改如下
static {        


System.load("libTestjni.so");


}
2.编译.so的时候提示找不到jni/jni下的xxx,在jni文件下再创建一个jni文件,然后将那些文件挪过去就好了

3.在dev下创建的设备节点是没有权限的,需要手动修改下权限
提供一个ndk下载的链接,文中的链接不知道为啥我连不上去
https://developer.android.google.cn/ndk/downloads/index.html



回复

使用道具 举报

433

积分

3

威望

0

贡献

技术达人

Rank: 2

积分
433
发表于 2017-6-27 09:53:14        只看该作者  沙发

这是安卓代码的工程,里面jni涉及到的主要文件我已经圈出来
Testjni.java
  1. package com.gpio.jni;

  2. public class Testjni {
  3. public native int led_off();
  4. public native int led_on();
  5. }
复制代码
com_jni_gpio_Testjni.c
  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include "com_gpio_jni_Testjni.h"

  6. JNIEXPORT  jint  JNICALL Java_com_gpio_jni_Testjni_led_1off
  7.   (JNIEnv * env, jobject obj){
  8.         jint res = -1;
  9.         int fd;
  10.         int flag = 1;
  11.         fd = open("/dev/hello",O_RDWR);
  12.         if (fd < 0)
  13.         {
  14.                 return res;
  15.         }
  16.         write(fd, &flag, sizeof(flag));

  17.         return 0;
  18. }

  19. JNIEXPORT  jint JNICALL Java_com_gpio_jni_Testjni_led_1on
  20.   (JNIEnv *env, jobject obj){
  21.         jint res = -1;
  22.         int fd;
  23.         int flag = 0;
  24.         fd = open("/dev/hello",O_RDWR);
  25.         if (fd < 0)
  26.         {
  27.                 return res;
  28.         }

  29.         write(fd, &flag, sizeof(flag));

  30.         return 0;
  31. }
复制代码
com_jni_gpio_Testjni.h
  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class com_gpio_jni_Testjni */

  4. #ifndef _Included_com_gpio_jni_Testjni
  5. #define _Included_com_gpio_jni_Testjni
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10. * Class:     com_gpio_jni_Testjni
  11. * Method:    led_off
  12. * Signature: ()I
  13. */
  14. JNIEXPORT jint JNICALL Java_com_gpio_jni_Testjni_led_1off
  15.   (JNIEnv *, jobject);

  16. /*
  17. * Class:     com_gpio_jni_Testjni
  18. * Method:    led_on
  19. * Signature: ()I
  20. */
  21. JNIEXPORT jint JNICALL Java_com_gpio_jni_Testjni_led_1on
  22.   (JNIEnv *, jobject);

  23. #ifdef __cplusplus
  24. }
  25. #endif
  26. #endif
复制代码
activity_main.xml
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:paddingBottom="@dimen/activity_vertical_margin"
  6.     android:paddingLeft="@dimen/activity_horizontal_margin"
  7.     android:paddingRight="@dimen/activity_horizontal_margin"
  8.     android:paddingTop="@dimen/activity_vertical_margin"
  9.     tools:context="com.gpio.gpio_ctrl.MainActivity" >

  10.     <Button
  11.         android:id="@+id/button2"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"
  14.         android:layout_alignBaseline="@+id/button1"
  15.         android:layout_alignBottom="@+id/button1"
  16.         android:layout_alignParentRight="true"
  17.         android:layout_marginRight="57dp"
  18.         android:text="LedOff" />

  19.     <Button
  20.         android:id="@+id/button1"
  21.         android:layout_width="wrap_content"
  22.         android:layout_height="wrap_content"
  23.         android:layout_alignParentLeft="true"
  24.         android:layout_centerVertical="true"
  25.         android:layout_marginLeft="23dp"
  26.         android:text="LedOn" />

  27. </RelativeLayout>
复制代码






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表