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

大道之行,天下为公。这篇文章主要讲述Android开发之JNI--HelloWorld及遇到的错误解析相关的知识,希望能为你提供帮助。
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; @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.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
文件里加入例如以下代码就可以:
【Android开发之JNI--HelloWorld及遇到的错误解析】
[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!
假设大家在开发的过程中还遇到别的错误,请在留言贴出问题并附上解决方法,供其它人參考。谢谢!





















    推荐阅读