• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > AS下NDK开发(一),as下ndk开发

AS下NDK开发(一),as下ndk开发

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了as ndk开发,as ndk,as ndk配置,android ndk开发,ndk开发等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

AS下NDK开发(一),as下ndk开发


捣鼓了一天的NDK,总结下。

Eclipse下开发ndk好像挺麻烦的样子,看书上要下载Cygwin,eclipse还要下载插件CDT。。而在AS上就方便多啦。下载android ndk。安装,配置环境,即可。

NDK(android native develop kits ):android 本地开发工具集 ,这些工具帮助开发者快速开发C或C++动态库,并自动将so和java文件打包成apk,可以把c/c++ ->编译成一个 linux下可以执行的二进制文件 java代码里面就可以通过jni 调用执行二进制的文件.

JNI :java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。

JNI开发用途:Native code效率高,数学运算,实时渲染的游戏上,音视频处理(极品飞车,opengl,ffmpeg等。

一、配置NDK环境

下载NDK,网上有很多,下载好之后,解压即可。然后在AS中配置,依次点击:File ->ProjectStructure:如图:

配置好之后,会在项目下的local.properties文件里自动添加:ndk.dir=D\:\\android-ndk-r10d   如果没有就自己加上,我的是自动的。

二、建立app项目

  1.建立一个普通的android project

  2.声明原生方法,必须加上native,告诉程序这是一个原生方法。在具体java代码调用时,和调用java的其他方法一样,直接调用就可以了。activity代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class NDK extends Activity {

    static {
        System.loadLibrary("MyJni");//导入生成的链接库文件
    }
    
    public native String getStringFromNative();//本地方法
    public native String getString_From_c();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ndk);
    }

    public void onClick(View view) {
        System.out.println(getString_From_c());
        Toast.makeText(this, getStringFromNative(), Toast.LENGTH_LONG).show();
    }
}

System.loadLibrary("MyJni");加载库,需要注意的是加载的库名即编译生成的库名,去掉前缀lib和后缀so。

然后make project一下,目的就是编译成对应的class文件。然后根据生成的class文件,利用javah生成对应的 .h头文件。

三、生成.h头文件

1.AS中点击view ->ToolsWindows->Terminal,
cd app\src\main,进入src\main\目录下:
2.执行:
javah -d jni -classpath F:\android\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\debug example.user.ndkdemo2.NDK
这个命令很长,分开慢慢来,javah是生成头文件需要的工具,-d jni 在工程下生成jni目录,到时会在这个目录下建JNI开始的C/C++源文件的。
-classpath F:\android\sdk\platforms\android-23\android.jar 这个就是你SDK文件下android.jar所在的文件位置,找到后复制即可。
..\..\build\intermediates\classes\debug 这个路径如图所示:

example.user.ndkdemo2.NDK就是NDKclass的路径名。

执行完这个命令后,会在main文件夹下自动生成jni目录和.h头文件。

可以打头文件看看:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class example_user_ndkdemo2_NDK */

#ifndef _Included_example_user_ndkdemo2_NDK
#define _Included_example_user_ndkdemo2_NDK
#ifdef __cplusplus
extern "C" {
#endif
#undef example_user_ndkdemo2_NDK_BIND_ABOVE_CLIENT
#define example_user_ndkdemo2_NDK_BIND_ABOVE_CLIENT 8L
#undef example_user_ndkdemo2_NDK_BIND_ADJUST_WITH_ACTIVITY
#define example_user_ndkdemo2_NDK_BIND_ADJUST_WITH_ACTIVITY 128L
#undef example_user_ndkdemo2_NDK_BIND_ALLOW_OOM_MANAGEMENT
#define example_user_ndkdemo2_NDK_BIND_ALLOW_OOM_MANAGEMENT 16L
#undef example_user_ndkdemo2_NDK_BIND_AUTO_CREATE
#define example_user_ndkdemo2_NDK_BIND_AUTO_CREATE 1L
#undef example_user_ndkdemo2_NDK_BIND_DEBUG_UNBIND
#define example_user_ndkdemo2_NDK_BIND_DEBUG_UNBIND 2L
#undef example_user_ndkdemo2_NDK_BIND_IMPORTANT
#define example_user_ndkdemo2_NDK_BIND_IMPORTANT 64L
#undef example_user_ndkdemo2_NDK_BIND_NOT_FOREGROUND
#define example_user_ndkdemo2_NDK_BIND_NOT_FOREGROUND 4L
#undef example_user_ndkdemo2_NDK_BIND_WAIVE_PRIORITY
#define example_user_ndkdemo2_NDK_BIND_WAIVE_PRIORITY 32L
#undef example_user_ndkdemo2_NDK_CONTEXT_IGNORE_SECURITY
#define example_user_ndkdemo2_NDK_CONTEXT_IGNORE_SECURITY 2L
#undef example_user_ndkdemo2_NDK_CONTEXT_INCLUDE_CODE
#define example_user_ndkdemo2_NDK_CONTEXT_INCLUDE_CODE 1L
#undef example_user_ndkdemo2_NDK_CONTEXT_RESTRICTED
#define example_user_ndkdemo2_NDK_CONTEXT_RESTRICTED 4L
#undef example_user_ndkdemo2_NDK_MODE_APPEND
#define example_user_ndkdemo2_NDK_MODE_APPEND 32768L
#undef example_user_ndkdemo2_NDK_MODE_ENABLE_WRITE_AHEAD_LOGGING
#define example_user_ndkdemo2_NDK_MODE_ENABLE_WRITE_AHEAD_LOGGING 8L
#undef example_user_ndkdemo2_NDK_MODE_MULTI_PROCESS
#define example_user_ndkdemo2_NDK_MODE_MULTI_PROCESS 4L
#undef example_user_ndkdemo2_NDK_MODE_PRIVATE
#define example_user_ndkdemo2_NDK_MODE_PRIVATE 0L
#undef example_user_ndkdemo2_NDK_MODE_WORLD_READABLE
#define example_user_ndkdemo2_NDK_MODE_WORLD_READABLE 1L
#undef example_user_ndkdemo2_NDK_MODE_WORLD_WRITEABLE
#define example_user_ndkdemo2_NDK_MODE_WORLD_WRITEABLE 2L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_DIALER
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_DIALER 1L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_DISABLE
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_DISABLE 0L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_GLOBAL
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_GLOBAL 4L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_LOCAL
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SEARCH_LOCAL 3L
#undef example_user_ndkdemo2_NDK_DEFAULT_KEYS_SHORTCUT
#define example_user_ndkdemo2_NDK_DEFAULT_KEYS_SHORTCUT 2L
#undef example_user_ndkdemo2_NDK_RESULT_CANCELED
#define example_user_ndkdemo2_NDK_RESULT_CANCELED 0L
#undef example_user_ndkdemo2_NDK_RESULT_FIRST_USER
#define example_user_ndkdemo2_NDK_RESULT_FIRST_USER 1L
#undef example_user_ndkdemo2_NDK_RESULT_OK
#define example_user_ndkdemo2_NDK_RESULT_OK -1L
#undef example_user_ndkdemo2_NDK_MAX_NUM_PENDING_FRAGMENT_ACTIVITY_RESULTS
#define example_user_ndkdemo2_NDK_MAX_NUM_PENDING_FRAGMENT_ACTIVITY_RESULTS 65534L
#undef example_user_ndkdemo2_NDK_HONEYCOMB
#define example_user_ndkdemo2_NDK_HONEYCOMB 11L
#undef example_user_ndkdemo2_NDK_MSG_REALLY_STOPPED
#define example_user_ndkdemo2_NDK_MSG_REALLY_STOPPED 1L
#undef example_user_ndkdemo2_NDK_MSG_RESUME_PENDING
#define example_user_ndkdemo2_NDK_MSG_RESUME_PENDING 2L
/*
 * Class:     example_user_ndkdemo2_NDK
 * Method:    getStringFromNative
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_example_user



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • AS下NDK开发(一),as下ndk开发

相关文章

  • 2017-05-26Android—Service与Activity的交互,androidactivity
  • 2017-05-26LruCache原理解析,lrucache解析
  • 2017-05-26我的第一节Android课,第一节Android课
  • 2017-05-26常用的adb命令,常用adb命令
  • 2017-05-26Android studio使用gradle动态构建APP(不同的包,不同的icon、label),androidgradle
  • 2017-05-26android实现文字渐变效果和歌词进度的效果
  • 2017-05-26多个viewpager可能产生的问题,多个viewpager产生
  • 2017-05-26Android程序中--不能改变的事情,android程序--改变
  • 2017-05-26Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset,nougatn7.1.2
  • 2017-05-26Cheatsheet: 2017 04.01 ~ 04.30,cheatsheet04.30

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android检查网络连接状态
    • Android 关于“NetworkOnMainThreadException”,networkonmainthread
    • Android 5.0 Settings源码简要分析
    • 2.4.2 Date & Time组件(上)
    • Android自动化构建之Ant多渠道打包实践分析(上)
    • Android开发学习——搭建开发环境,android搭建
    • 手机影音7--视频播放器的基本功能(4),7--基本功能
    • android.view.InflateException: Binary XML file line #34: Error inflating class,
    • Android开发1:基本UI界面设计——布局和组件,androidui
    • 可展开的列表组件——ExpandableListView深入解析,expandablelist展开

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有