andoid 项目文件结构图

新建Hardcontrol.java

package com.thisway.hardlibrary;

public class HardControl {
public static native int ledCtrl(int which, int status);
public static native int ledOpen();
public static native void ledClose(); static {
try {
System.loadLibrary("hardcontrol");
} catch (Exception e) {
e.printStackTrace();
}
} }

访问C库

  1.修改build.gradle

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

  新建hardcontrol.c文件

#include <jni.h>    /* /usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ */
#include <stdio.h>
#include <stdlib.h> #include <android/log.h> /* android log*/ #if 0
typedef struct {
char *name; /* Java里调用的函数名 */
char *signature; /* JNI字段描述符, 用来表示Java里调用的函数的参数和返回值类型 */
void *fnPtr; /* C语言实现的本地函数 */
} JNINativeMethod;
#endif jint ledOpen(JNIEnv *env, jclass cls)
{ __android_log_print(ANDROID_LOG_DEBUG, "JNIDemo", "native add ...");
__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledOpen......");
return ;
} void ledClose(JNIEnv *env, jclass cls)
{
__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledClose......");
} jint ledCtrl(JNIEnv *env, jclass cls,jint which, jint status)
{
__android_log_print(ANDROID_LOG_DEBUG, "LEDDemo", "native ledCtrl: %d, %d",which, status); return ;
} static const JNINativeMethod methods[] = {
{"ledOpen", "()I", (void *)ledOpen},
{"ledClose", "()V", (void *)ledClose},
{"ledCtrl", "(II)I", (void *)ledCtrl},
}; /* System.loadLibrary */
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *jvm, void *reserved)
{
JNIEnv *env;
jclass cls; if ((*jvm)->GetEnv(jvm, (void **)&env, JNI_VERSION_1_4)) {
return JNI_ERR; /* JNI version not supported */
}
cls = (*env)->FindClass(env, "com/thisway/hardlibrary/HardControl");
if (cls == NULL) {
return JNI_ERR;
} /* 2. map hello java<-->c c_hello */
if((*env)->RegisterNatives(env, cls, methods, sizeof(methods) / sizeof(methods[])) < )
return JNI_ERR; return JNI_VERSION_1_4;
}

  2.编译so文件

arm-linux-gcc -fPIC -shared hardcontrol.c -o libhardcontrol.so 
-I /usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ 
-nostdlib /work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/libc.so
-I /work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/include
/work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/liblog.so

  3.在app/libs下建armeabi子目录,放入so文件

 在4412开发板上运行,点相应按钮后会有调试信息打印

最新文章

  1. 【转】zigbee终端无法重连的问题解决
  2. 基于modelsim-SE的简单仿真流程—上
  3. linux系统CentOS7
  4. 谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind &amp; CxDeviceMapFind
  5. 《编写可维护的JavaScript》——JavaScript编码规范(五)
  6. text()和html()的区别,以及val()
  7. SVN版本管理系统的安装 CentOS + Subversion + Apache + Jsvnadmin
  8. 【转】SVN环境搭建教程
  9. lua metatable 和 _index 实验
  10. CurlSharp
  11. Lighttpd日志打印格式
  12. cocos2d-x 头文件中添加方法变量导致编译报错
  13. Lonely Integer
  14. PHP之回调函数传参(解决eval函数拼接对象参数的问题)
  15. Data Base mongodb高版本与低版本的区别
  16. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
  17. 了解一下RabbitMQ
  18. js实现的省市联动
  19. ELK - MAC环境搭建
  20. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

热门文章

  1. C语言实现Windows下获取IP和MAC地址。
  2. C++ I/O库练习
  3. Vue路由组件vue-router
  4. 调用opencv的接口实现人脸检测(简单)
  5. 玩玩Mybatis的逆向工程
  6. Update Vim to 8.0 in Ubuntu
  7. boost smart pointer
  8. Adobe 2019 全家桶 Win 版
  9. kubernetes部署metrics-server metrics-server-v0.3.4 pod报错
  10. node 桌面应用开发