热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidstudioNDKdemo

Androidstudiondkdemo本文使用的是Androidstudio2.0:新建工程并添加一个新的类NDKTest.java1.加载即将生成的.so文件

Android studio ndk demo

本文使用的是Android studio 2.0:


新建工程 并添加一个新的类

工程

NDKTest.java
1.加载即将生成的.so文件
2.native接口

package com.example.test.demo;/*** Created by admin on 2017/8/20.*/
public class NDKTest {static {System.loadLibrary("nkdTest");}public native String getString();
}

进行编译 会在的build文件加下生成对应的class文件,如下图所示
这里写图片描述

(此处要切换到project模式下)


生成.h文件 添加.c文件 编译生成.lib文件

命令行切换到你的工程main目录下
D:\demo\app\src\main>javah -d jni -classpath D:\demo\app\build\intermediates\classes\debug com.example.test.demo.NDKTest
运行后 在该目录下将会生成jni/com_example_test_demo_NDKTest.h

这里写图片描述

在该目录下添加.c文件com_example_test_demo_NDKTest.c

#include "com_example_test_demo_NDKTest.h"JNIEXPORT jstring JNICALL Java_com_example_test_demo_NDKTest_getString(JNIEnv *env, jobject jobject){return (*env)->NewStringUTF(env, "hello ndk test");
}

build.gradle 文件添加配置
这里写图片描述
此处moduleName就是创建的java文件加载的库 要保持一致

ndk {moduleName "nkdTest"//与自己创建类加载的库名一致abiFilters "armeabi", "armeabi-v7a", "x86"stl "stlport_static"}

编译与运行

编译成功后会生成.lib文件
这里写图片描述

在MainActivity.java修改

package com.example.test.demo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = (TextView)findViewById(R.id.test);//此处id在main自定义textView.setText(new NDKTest().getString());}
}

可能出现的错误:
1.

Consider trying the new experimental pluginSet "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration

按照提示在gradle.properties文件中末尾添加android.useDeprecatedNdk=true

2.

Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
...
...

修改版本 重新运行
这里写图片描述

运行结果:
这里写图片描述


推荐阅读
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • Java多线程售票案例分析
    本文通过一个售票系统的实例,深入探讨了Java中的多线程技术及其在资源共享和并发控制中的应用。售票过程涉及查询、收款、找零和出票等多个步骤,其中对总票数的管理尤为关键。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 使用Java计算两个日期之间的月份数
    本文详细介绍了利用Java编程语言计算两个指定日期之间月份数的方法。文章通过实例代码讲解了如何使用Joda-Time库来简化日期处理过程,旨在为开发者提供一个高效且易于理解的解决方案。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文介绍了如何在C# WinForms应用程序中通过自定义绘制实现圆形按钮的方法,适合初学者参考。 ... [详细]
  • 编码unicode解决了语言不通的问题.但是.unicode又有一个新问题.由于unicode是万国码.把所有国家的文字都编进去了.这就导致一个unicode占用的空间会很大.原来 ... [详细]
  • 解析Java虚拟机HotSpot中的GC算法实现
    本文探讨了Java虚拟机(JVM)中HotSpot实现的垃圾回收(GC)算法,重点介绍了根节点枚举、安全点及安全区域的概念和技术细节,以及这些机制如何影响GC的效率和准确性。 ... [详细]
  • 本文基于Java官方文档进行了适当修改,旨在介绍如何实现一个能够同时处理多个客户端请求的服务端程序。在前文中,我们探讨了单客户端访问的服务端实现,而本篇将深入讲解多客户端环境下的服务端设计与实现。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 深入理解线程池及其基本实现
    本文探讨了线程池的概念、优势及其在Java中的应用。通过实例分析不同类型的线程池,并指导如何构建一个简易的线程池。 ... [详细]
author-avatar
洗吉精洗白菜_773
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有