Android NDK开发初步
在配置好NDK开发之后就能够使用C/C++开发android了。以下以一个HelloWorld项目来说明
1.新建一个Androidproject
新建一个HelloWorldproject
代码例如以下
- package com.zhycheng;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.TextView;
- public class HelloWorldActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView tv=new TextView(this);
- tv.setText(srringFromCpp());
- setContentView(tv); }
- public native String srringFromCpp();
- static { System.loadLibrary("HelloWorld"); }}
System.loadLibrary("HelloWorld");中的HelloWorld是动态链接库libHelloWorld.so
2 生成头文件和源文件
先在project文件夹下新建一个文件夹叫做jni
如今我要使用javah这个工具生成头文件
在project的文件夹下运行命令
zhycheng@zhycheng-Lenovo-B460:~/androidworkspace/HelloWorld$ javah -classpath bin/classes -d jni com.zhycheng.HelloWorldActivity
这时在jni目录下就生成了com_zhycheng_HelloWorldActivity.h头文件。内容例如以下
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* Header for class com_zhycheng_HelloWorldActivity */
- #ifndef _Included_com_zhycheng_HelloWorldActivity
- #define _Included_com_zhycheng_HelloWorldActivity
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: com_zhycheng_HelloWorldActivity
- * Method: srringFromCpp
- * Signature: ()Ljava/lang/String;
- */
- JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
- (JNIEnv *, jobject);
- #ifdef __cplusplus
- }
- #endif
- #endif
- 在这个文件中,我们能够得到srringFromCpp的函数名。
- 以下我在jni目录里新建一个HelloWord.c文件内容例如以下
- #include <string.h>
- #include <jni.h>
- JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
- (JNIEnv *env, jobject obj)
- {
- return (*env)->NewStringUTF(env,"张译成");
- }
这里还要在jni文件夹里新建一个Android.mk文件。内容例如以下
- LOCAL_PATH:= $(call my-dir)
- include $(CLEAR_VARS)
- LOCAL_MODULE := HelloWorld
- LOCAL_SRC_FILES:= HelloWorld.c
- include $(BUILD_SHARED_LIBRARY)
4 生成动态链接库
在project文件夹里运行以下的命令
- zhycheng@zhycheng-Lenovo-B460:~/androidworkspace/HelloWorld$ ndk-build
- Compile thumb : HelloWorld <= HelloWorld.c
- SharedLibrary : libHelloWorld.so
- Install : libHelloWorld.so => libs/armeabi/libHelloWorld.so
这样就得到了libHelloWorld.so文件。这个文件在libs/armeabi目录里。
5 执行整个project
能够看到。在界面上显示了从动态链接库返回的字符串。
Android NDK开发初步的更多相关文章
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- Android NDK开发初识
神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...
- Android NDK开发Hello Word!
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- Android NDK开发
Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...
- Android NDK 开发(四)java传递数据到C【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...
- Android NDK 开发(三)--常见错误锦集合Log的使用【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511 Android NDK开发经常因某些因素会出现一些意想不到的错误, ...
- Android NDK 开发(二) -- 从Hlello World学起【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719 上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...
- android NDK开发环境搭建
android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...
- !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...
随机推荐
- PE笔记之NT头PE签名
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; //PE头签名PE\0\0 IM ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---33
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- C# 用实例来理解IComparable和IComparer
通过Array的Sort方法来理解的 Sort方法要 通过对象去继承IComparable接口来实现排序(当然也有其它办法),我想入门这可能就是对这句话有点不理解,在下面会有注释 using Syst ...
- 10.1综合强化刷题 Day7
noip提高组模拟赛 ...
- OS | 死锁
死锁的四个条件 互斥 占用等待 非剥夺 循环等待 死锁的解决方案 死锁预防 间接预防:防止前三个条件中的任何一个的发生 直接预防:防止循环等待的发生 死锁避免 进程启动拒绝:不启动任何一个可能发生死锁 ...
- 关于bug的沟通
关于BUG的沟通 一个人要去做一件事情,一般来说是按照自己的意愿去做的,如果不是自己想做而是被要求这么做的话,心里一定会留下点不愉快,特别是那种有自信有自己主见的人,比如说开发人员,当测试人员发现一个 ...
- 【转】浅谈多核CPU、多线程、多进程
浅谈多核CPU.多线程.多进程 1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核3 ...
- SecureCRT鼠标快速复制粘贴
- Data-structures-and-algorithms-interview-questions-and-their-solutions
https://techiedelight.quora.com/500-Data-structures-and-algorithms-interview-questions-and-their-sol ...
- ajax跨域解决办法
在使用jquery的ajax作请求时,http://127.0.0.1:8080,类似这样的一个本地请求,会产生跨域问题, 解决办法一: jsonp: var url= "http://12 ...