Android开发之JNI(一)--HelloWorld及遇到的错误解析
2023-09-11 14:14:10 时间
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文件夹下
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
文件里加入例如以下代码就可以:
- APP_PLATFORM := android-8
4.ANDROIDNDK:WARINGUnsupported source file extensions in jni/Android.mk for module XXXX
这是由于我在做的时候把
- 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!
假设大家在开发的过程中还遇到别的错误,请在留言贴出问题并附上解决方法,供其它人參考。谢谢!
相关文章
- Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳
- Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml
- Android 异常 android.os.NetworkOnMainThreadException
- Android 手机震动提示效果 Android Vibrator 手机震动
- Eclipse中android工程C++文件中出现的莫名其妙的错误
- JAVA、Android与Cordova环境搭建
- Android项目实战欢迎界面
- Xamarin如何生成Android项目的APK
- Android 读写位于SD卡上的sqlite数据库文件错误问题
- 《深入解析Android 虚拟机》——1.4 编译Android Kernel
- Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误
- Android开发之旅:android架构
- android开发:Android 中自定义属性(attr.xml,TypedArray)的使用
- android 开发解密时出现pad block corrupted 错误
- Android App开发超实用实例 | AlertDialog对话框
- Android常用学习网站
- Android Studio 常见错误 之 Servers certificate is not trusted 解决证书不可信任老弹出的 问题
- Android回调事件传播-android学习之旅(四十五)
- android 错误解决方法 ---积累中
- 【Android Studio报错】:Failed to read key AndroidDebugKey from store “C:Users13181.androiddebug.keys