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


1.NDK环境搭建


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;

    @Override
protected 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.c include $(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

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

  1. APP_PLATFORM := android-8

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


4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX
这是由于我在做的时候把
  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开发之旅: Intents和Intent Filters(理论部分)

    引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...

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

    http://www.cnblogs.com/skynet/archive/2010/05/20/1740277.html 引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实 ...

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

    引言 为了后面的例子做准备,本篇及接下来几篇将介绍Android应用程序的原理及术语,这些也是作为一个Android的开发人员必须要了解,且深刻理解的东西.本篇的主题如下: 1.应用程序基础 2.应用 ...

  4. Android开发之旅3:android架构

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

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

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

  6. 【Android UI】Android开发之View的几种布局方式及实践

    引言 通过前面两篇: Android 开发之旅:又见Hello World! Android 开发之旅:深入分析布局文件&又是“Hello World!” 我们对Android应用程序运行原理 ...

  7. Android开发之Java集合类性能分析

    对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...

  8. Android开发之InstanceState详解

    Android开发之InstanceState详解   本文介绍Android中关于Activity的两个神秘方法:onSaveInstanceState() 和 onRestoreInstanceS ...

  9. Android开发之Git配置

    Android开发之Git配置 1.首先git配置: 输入命令: git config --global user.name "xxx.xx" git config --globa ...

随机推荐

  1. sping PropertyPlaceholderConfigurer

    例如,要载入配置文件中的mysql配置信息: jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mypage ...

  2. sqlserver中case when then用法

    sql语句判断方法之一,Case具有两种格式,简单Case函数和Case搜索函数. --简单Case函数 (CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' E ...

  3. xshell连接虚拟机CentOS出现eth0 device not found的解决方法

    昨天用xshell连接虚拟机上的centOS老是连接不上,ifconfig eth0 命令显示 device not found.不知道是什么原因... 折腾了好久 网上是各种搜啊 终于找到解决方法了 ...

  4. DevExpress控件-GridControl根据条件改变单元格/行颜色(Dev GridControl 单元格着色) z

    DevExpress控件-数据控件GridControl,有时我们需要根据特定条件改变符合条件的行或者单元格颜色达到突出显示目的,现在动起鼠标跟我一起操作吧,对的,要达到这个目的您甚至都不用动键盘. ...

  5. 内部网络出口防火墙导致TCP类扫描异常

    测试过程中确认,由于内部网络出口防火墙存在连接数等策略限制,会导致TCP类扫描出现异常,表现为大量误报. Nessus.nmap.synscan均存在此现象.

  6. 【互动问答分享】第18期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    Q1:Master和Driver的是同一个东西吗? 两者不是同一个东西,在Standalone模式下Master是用于集群资源管理和调度的,而Driver适用于指挥Worker上的Executor通过 ...

  7. ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF)

    先上一段代码,了解一下 .NET Core 配置数据的结构. 新建一个 控制台项目,添加一个文件 json.json ,文件内容如下: { "country": "cn& ...

  8. Web应用漏洞评估工具Paros

    Web应用漏洞评估工具Paros   Paros是Kali Linux集成的一款Web应用漏洞评估工具.该工具提供HTTP会话分析.网络爬虫.漏洞扫描三大功能.首先借助HTTP代理模式,该工具可以实时 ...

  9. 【分块】【哈希】bzoj3578 GTY的人类基因组计划2

    每个房间用一个集合来维护,具体来说,就是给1-n的数每个数一个long long的hash值,往集合S里insert(i),就是S^=HASH[i]:erase(i),也是S^=HASH[i]. 用m ...

  10. css layout入门(转)

    元素与盒 在HTML中常常使用的概念是元素,而在CSS中,布局的基本单位是盒,盒总是矩形的. 元素与盒并非一一对应的关系,一个元素可能生成多个盒,CSS规则中的伪元素也可能生成盒,display属性为 ...