Android开发之JNI(一)--HelloWorld及遇到的错误解析

1.NDK环境搭建

參考http://blog.csdn.net/xiaoliouc/article/details/8705560

2.HelloWorld编写

(1)新建一个AndroidprojectJniDemo,这个名字能够随便起;
(2)新建一个HelloWorld.java类,里面的内容例如以下:
public class HelloWorld {public native String print();static {System.loadLibrary("hello-jni");}
}

(3)在MainActivity.java类中调用,例如以下所看到的:
private TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView = (TextView) findViewById(R.id.text_view);String helloWorld = new HelloWorld().print();mTextView.setText(helloWorld);}
(4)打开cmd,进入到projectHelloWorld.java类所在文件夹。执行例如以下命令
javac HelloWorld.java
生成了一个HelloWorld.class的文件
(5)用cmd返回到projectsrc文件夹。执行下面命令
javah  com.example.jnidemo.HelloWorld,这时生成一个com_example_jnidemo_HelloWorld.h文件
也能够用命令 javah -classpath . -jni  com.example.jnidemo.HelloWorld
                                     javah -classpath .  com.example.jnidemo.HelloWorld
可是必需在src文件夹下

(6)右击project名。新那一个folder,起名jni,从android ndk文件夹下copy这个两个文件,

android-ndk\samples\hello-jni\jni\Application.mk
android-ndk\samples\hello-jni\jni\Android.mk
然后把com_example_jnidemo_HelloWorld.h重命名为HelloWorld.h这个名字能够任意命也copy到jni文件夹下
(7)编写h文件的实现文件c,此处实现文件为HelloWorld.c。内容例如以下:
(8)打开cygdrive,进入到项目的根文件夹,执行例如以下命令$NDK/ndk-build, $NDK改成自己配的名字;完毕后刷新项目,文件夹下多了obj文件夹
#include  <string.h>
#include <jni.h>#include "HelloWorld.h"JNIEXPORT jstring JNICALL Java_com_example_jnidemo_HelloWorld_print(JNIEnv* env, jobject thiz) {return (*env)->NewStringUTF(env, "Hello World!");
}

(9)Android.mk文件配置例如以下:
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := HelloWorld.cinclude $(BUILD_SHARED_LIBRARY)

LOCAL_MODULE后面的值和ystem.loadLibrary("hello-jni");里面的字符串保持一致,表示要载入的模块库
LOCAL_SRC_FILES的值为要编译的源文件
编译好后执行项目。得到了想要的结果

3.在初次编写NDK时可能遇到的一些问题总结:

1. Type '*****' could not be resolved 
  Method '******' could not be resolved等等
解决方法:左键->Properties->C/C++ General->Paths and Symbols->Includes->Add->加入D:\adt-bundle-windows\android-ndk\platforms\android-19\arch-arm\usr\include,NDK的路径
2. 假设还报1的错误,Window->Show View->Problems,清除全部错误,这样就好了。有时候弄好之后。在几个文件之间切换。又会报这种错误,做法继续2.
3.Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8

这是由于NDK指定的版本号与minSdkVersion不一致的问题,这本身仅仅是一个警告。可是在eclipse下就会编译报错,那么怎样修复呢?

仅仅须要在你的project的:

Application.mk

文件里加入例如以下代码就可以:

[cpp] view plaincopy
  1. APP_PLATFORM := android-8

当中8就是指的minSdkVersion,依据自己的实际情况进行替换!

4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX
这是由于我在做的时候把
[cpp] view plaincopy
  1. LOCAL_SRC_FILES := HelloWorld.h 改成 LOCAL_SRC_FILES := HelloWorld.c
5.obj/local/armeabi-v7a/objs/xxxxx  ****multiple target patterns. Stop
这是删掉obj这个目录,又一次生成$NDK/ndk-build就OK!
假设大家在开发的过程中还遇到别的错误,请在留言贴出问题并附上解决方法,供其它人參考,谢谢!

Android开发之JNI(一)--HelloWorld及遇到的错误解析相关推荐

  1. Android开发之旅:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  2. android之json解析优化,Android开发之json解析

    目前正在尝试着写app,发现看懂代码和能写出来差距很大,最关键的是java基础比较的差,因为只会python,java基础只学习了一个礼拜就过了.感觉java写出来的代码不如python简单明了. 上 ...

  3. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  4. Android开发之旅:应用程序基础及组件

    --成功属于耐得住寂寞的人,接下来几篇将讲述Android应用程序的原理及术语,可能会比较枯燥.如果能够静下心来看,相信成功将属于你. 引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android ...

  5. Android开发之旅:android架构

    引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我 们对android有了个大致的了解,知道如何搭建and ...

  6. Android 开发之旅:深入分析布局文件又是“Hello World!”

    引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实践,我们拿起手术刀对默认的"Hello World!"程序进行了3个手术,我们清楚了"Hell ...

  7. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  8. 【原作者:吴秦(Tyler)http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html】Android开发之旅:环境搭建及HelloWo

    Android开发之旅:环境搭建及HelloWorld 2010-04-12 00:45 by 吴秦, 801360 阅读, 138 评论, 收藏, 编辑 --工欲善其事必先利其器 引言 本系列适合0 ...

  9. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

最新文章

  1. 重磅!AMD350亿美金收购赛灵思,「苏妈」终于出手啦!
  2. Android stadio 调试太掉了
  3. linux 用户创建、管理、权限分配
  4. java 异步socket_java Socket读写异步分离
  5. find命令及文件后缀名
  6. Java编程实现三种等级的扫雷游戏(完整版)
  7. 仿微信在线聊天源码 DuckChat聊天系统PHP采用 PHP 编写的聊天软件,简直就是一个完整的迷你版微信
  8. 边读边捋【july的】海量数据处理面试题
  9. ROS的 sudo rosdep init 的报错终极解决方案
  10. 备份和恢复 ESXi 主机配置
  11. 使用虚拟信用卡绑定亚马逊卖家号店铺扣月租费教程
  12. 汇编语言笔记(王爽)
  13. strom及DRPC性能测试与改进
  14. postman使用自定义函数
  15. jQuery的属性,位置,元素操作
  16. 根据ACR/EULAR 2010 标准定义RA放射学侵蚀病变
  17. Java 实现联机Ateroids飞船陨石小游戏(多线程,网络)
  18. c语言1h什么意思,标准现代精确——1C开叫1H应叫及其他应叫
  19. RAC+ADG(单节点ADG)
  20. 容器+云管,BoCloud博云定位PaaS场景而非只是容器标签

热门文章

  1. 对外合作对话国际农民丰收节贸易会 农业农村部谋定稳求进
  2. 对话国际农民丰收节贸易会-林育庆:菲律宾谋定中国农业
  3. python tempfile 创建临时目录
  4. maven配置环境变量失败解决办法
  5. python发送邮件及附件
  6. Null reference pointer was passed to the stub when not debugging with IE
  7. 圈子 | 苏宁易购产品经理:平台支撑型产品的思维方式
  8. OpenStack实践(一):Ubuntu16.04下DevStack方式搭建p版OpenStack
  9. 配置_DruidDataSource参考配置
  10. Windows Server 2008 R2之十一Windows Server Backup