在配置好NDK开发之后就能够使用C/C++开发android了。以下以一个HelloWorld项目来说明

1.新建一个Androidproject

新建一个HelloWorldproject

代码例如以下

  1. package com.zhycheng;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.TextView;
  5. public class HelloWorldActivity extends Activity {
  6. /** Called when the activity is first created. */
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. TextView tv=new TextView(this);
  11. tv.setText(srringFromCpp());
  12. setContentView(tv); }
  13. public native String srringFromCpp();
  14. 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头文件。内容例如以下

  1. /* DO NOT EDIT THIS FILE - it is machine generated */
  2. #include <jni.h>
  3. /* Header for class com_zhycheng_HelloWorldActivity */
  4. #ifndef _Included_com_zhycheng_HelloWorldActivity
  5. #define _Included_com_zhycheng_HelloWorldActivity
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9. /*
  10. * Class:     com_zhycheng_HelloWorldActivity
  11. * Method:    srringFromCpp
  12. * Signature: ()Ljava/lang/String;
  13. */
  14. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
  15. (JNIEnv *, jobject);
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif
  20. 在这个文件中,我们能够得到srringFromCpp的函数名。
  21. 以下我在jni目录里新建一个HelloWord.c文件内容例如以下
  22. #include <string.h>
  23. #include <jni.h>
  24. JNIEXPORT jstring JNICALL Java_com_zhycheng_HelloWorldActivity_srringFromCpp
  25. (JNIEnv *env, jobject obj)
  26. {
  27. return (*env)->NewStringUTF(env,"张译成");
  28. }

这里还要在jni文件夹里新建一个Android.mk文件。内容例如以下

  1. LOCAL_PATH:= $(call my-dir)
  2. include $(CLEAR_VARS)
  3. LOCAL_MODULE := HelloWorld
  4. LOCAL_SRC_FILES:= HelloWorld.c
  5. include $(BUILD_SHARED_LIBRARY)

4 生成动态链接库

在project文件夹里运行以下的命令

  1. zhycheng@zhycheng-Lenovo-B460:~/androidworkspace/HelloWorld$ ndk-build
  2. Compile thumb  : HelloWorld <= HelloWorld.c
  3. SharedLibrary  : libHelloWorld.so
  4. Install        : libHelloWorld.so => libs/armeabi/libHelloWorld.so

这样就得到了libHelloWorld.so文件。这个文件在libs/armeabi目录里。

5 执行整个project

能够看到。在界面上显示了从动态链接库返回的字符串。

Android NDK开发初步的更多相关文章

  1. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  2. Android NDK开发初识

    神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...

  3. Android NDK开发Hello Word!

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  4. Android NDK开发

    Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...

  5. Android NDK 开发(四)java传递数据到C【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...

  6. Android NDK 开发(三)--常见错误锦集合Log的使用【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误, ...

  7. Android NDK 开发(二) -- 从Hlello World学起【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719  上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...

  8. android NDK开发环境搭建

    android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...

  9. !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结

    http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...

随机推荐

  1. Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法

    Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...

  2. git的使用学习(六)git的标签管理

    发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...

  3. AC日记——银河英雄传说 codevs 1540

    1540 银河英雄传说 2002年NOI全国竞赛  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解       题目描述 Description 公元五 ...

  4. 牛客网 牛客练习赛13 A.幸运数字Ⅰ

    A.幸运数字Ⅰ 链接:https://www.nowcoder.com/acm/contest/70/A来源:牛客网     水题.   代码: #include<iostream> #i ...

  5. Apache + mod_wsgi部署webpy应用

    Apache + mod_wsgi部署webpy应用   引用:http://webpy.org/cookbook/mod_wsgi-apache.zh-cn 下面的步骤在Apache-2.2.3 ( ...

  6. BitMap与RoaringBitmap、JavaEWAH

    本文主要介绍BitMap的算法思想,以及开源工具类JavaEWAH.RoaringBitmap的简单用法. 一.BitMap 介绍 BitMap使用bit位,来标记元素对应的Value.该算法能够节省 ...

  7. NOI模拟题5 Problem A: 开场题

    Solution 注意到\(\gcd\)具有结合律: \[ \gcd(a, b, c) = \gcd(a, \gcd(b, c)) \] 因此我们从后往前, 对于每个位置\(L\), 找到每一段不同的 ...

  8. 轻松加减你的NSDate值

    废话不多,先上github链接:https://github.com/codegefluester/CGFDateModifier 然后上使用方法代码: NSDate *oneWeekFromNow ...

  9. 【spring boot】配置文件 application.properties 属性解析

    1.JPA  hibernate命名策略 完整命名策略 ,查看:http://www.cnblogs.com/sxdcgaq8080/p/7910474.html 2.hibernate的DDL执行策 ...

  10. 【前端阅读】——《程序员思维修炼》摘记&读后感&思维导图

    前言:这是一本介绍如何用脑的书,并从思维的角度(以程序员为例),介绍如何从新手成为专家.作者带领着读者(我)共同经历一次有关认知科学.神经学.学习和行为理论的旅程,探索人类大脑令人 惊奇的工作的机制, ...