Android开发之JNI(一)--HelloWorld及遇到的错误解析
2014-11-20 15:49
330 查看
Android开发之JNI(一)--HelloWorld及遇到的错误解析
1.NDK环境搭建
参考http://blog.csdn.net/xiaoliouc/article/details/87055602.HelloWorld编写
(1)新建一个Android工程JniDemo,这个名字可以随便起;(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,进入到工程HelloWorld.java类所在目录,运行如下命令
javac HelloWorld.java
生成了一个HelloWorld.class的文件
(5)用cmd返回到工程src目录,运行以下命令
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)右击工程名,新那一个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 resolvedMethod '******' 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下就会编译报错,那么如何修复呢?
只需要在你的工程的:
Application.mk
文件中添加如下代码即可:
[cpp] view
plaincopy
APP_PLATFORM := android-8
其中8就是指的minSdkVersion,根据自己的实际情况进行替换!
4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX
这是因为我在做的时候把
[cpp] view
plaincopy
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及遇到的错误解析
- android 开发中遇到的错误及解决方式(更新R.java文件不能自动更新问题)
- Android开发过程中遇到的错误及其解决的方法
- Cocos2d-x使用过程中遇到的错误(VS下开发,移植到Android发布)
- 【Android 系统开发】Android JNI 之 JNIEnv 解析
- android jni开发中常见的错误
- android开发使用sqllite时遇到的错误
- Android开发中遇到的错误及解决方法(1)
- CentOS上搭建Android开发环境遇到此错误:failed to create the SD card
- jni开发之 Android.mk文件解析
- android百度地图开发遇到的错误及解决方法
- Android开发过程中遇到的“错误”...不断更新中...
- 移动开发:android编程中遇到的Caused by: android.view.InflateException: Binary XML file line #11: Erro错误的原因及解决办法
- Android开发中遇到的错误
- Android 开发环境搭建 与在编译中遇到错误make Error 45解决方法
- Cocos2d-x使用过程中遇到的错误(VS下开发,移植到Android发布)(更新ing)
- android 地图服务开发 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误解决 地图服务开发中遇到此类错误大体分为以下两种情况解决:
- android 开发中经常遇到的错误以及解决方法
- Android开发新手HelloWorld解析
- 〖Linux〗Qt5.2.0+gsoap开发Android的NDK程序遇到错误的解决