android studio 进行ndk开发思考总结
来源:互联网 发布:ie11 找不到js 编辑:程序博客网 时间:2024/06/10 07:56
第一:环境配置。下载ndk,在as里面配置ndk,电脑环境变量配置PATH,ANDROID_NDK_HOME,至于是不是非得两个我也不清楚,就是在解决问题的时候就配置上了。路径都指向ndk第一层就行,比如:E:\android-ndk-r10b。这种。验证办法就是windows系统的cmd命令,然后输入ndk-build,如果能够解析证明配置成功。我出现了一个问题,cmd能够解析,但是as自带的terminal,确不能在任意的路径下都执行这个文件,可能是我哪里没配置好。先不管。
第二:jni调用。首先得把原理明确下,不然百度了一通,确并不知道为啥要这么写。一般情况下,是main下面建立个jni目录,然后建立个class文件,比如testjni.class文件,这个文件主要写一句话,那就是
public native String sayHello();
这个相当于一个接口了,首先这个文件的目的其实就是为了生成一个头文件,这个可以用javah来生成,这个头文件一般是通过指令生成,自己最好别写。看下生成的头文件名称,com_example_xdg_testjni_jniclass.h。没错,就是包名+类名。实际上这个就是native调用的方法。接下来,在jni目录下面,新建一个.c文件,这个文件具体的sayHello()实现。#include "com_example_xdg_testjni_jniclass.h"JNIEXPORT void JNICALL Java_com_example_xdg_testjni_jniclass_sayHello(JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env,"thi is c call");}大家可以看下,sayHell()明明有返回String,但是JNIEXPORT void JNICALL。这个我就搞不懂了。再看下参数,包含两个,JNIEnv *env, jobject obj。JNIEnv就是调用的环境,java层代码调用的时候就是传入的JNIEnv,包括包名,类名,来C文件中查找,具体的c实现。jobject就是具体的调用者,一般就是具体的java类了。这个文件写完,注意了,自己要在jni目录下面,新建Android.mk和Appilication,mk.这个是ndk编译so文件用的,是不是很坑,不过有现成的模板,看下我的,大家根据实际自己改吧。
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS += -llogLOCAL_MODULE := TestJniLOCAL_SRC_FILES := TestJni.cinclude $(BUILD_SHARED_LIBRARY)LOCAL_CFLAGS += -I~/android-2.0/system/core/include
Application.mk
APP_ABI := armeabi armeabi-v7a mips x86APP_PLATFORM := android-9。接下来,还要处理下,gradle文件,ndk{ moduleName "libTestJni" //生成的so名字 abiFilters "armeabi", "armeabi-v7a", "x86" //输出指定三种abi体系结构下的so库。目前可有可无。 stl "stlport_static" //调试所用 ldLibs "log"}这个写在 android{}里面。好了,应该没啥了。接下来进行惊心动魄的生成.so文件。在这个地方我用as下面的terminal去生成老是报错,各种报错。后来改用window系统自带的cmd来生成。首先把cd到main下面,然后用ndk-build就会生成so文件了,中间要是出差错,提示信息到某行某个位,所以自己仔细看下。第三:调试。网上好多说可以调式c,c++的,但是我都没有成功。还有一个日志输出的系统,#include <cutils/log.h>。我一直解析不出cutils,知道的人可否告知一下。
后来就没用这个调试了,自己看下app上面显示的文字效果。这里有个要注意的地方,当你改变了sayhello的实现的时候,如果要及时看见信息,最后清理下,甚至直接把so删除,在ndk-build,如果还出不来,先把自己手机的app删除,然后调试,反正我一直看不到效果,经过这些操作文字才有改变,可能缓存比较严重。
0 0
- android studio 进行ndk开发思考总结
- Android studio进行NDK开发
- android studio进行NDK开发
- 在Android studio中进行NDK开发
- 使用Android Studio进行NDK开发
- 在Android studio中进行NDK开发
- 使用Android Studio进行NDK开发
- 使用 Android Studio 进行 NDK 开发
- Android Studio利用Gradle进行NDK开发
- Android Studio进行NDK开发笔记
- Android Studio 进行NDK开发入门
- 使用Android studio进行NDK开发
- Android 使用Android Studio进行NDK-JNI开发
- Android studio NDK开发
- Android Studio开发NDK
- Android Studio ndk开发
- Android studio开发NDK
- Android Studio NDK开发
- 设备与模块
- spring事物管理相关配置
- [bzoj 2588] Spoj 10628. Count on a tree:函数式线段树
- 新版caffe FCN的使用教程
- TCollector基于opentsdb的采集器
- android studio 进行ndk开发思考总结
- Linux Makefile 优化编译速度
- jetty与eclipse整合
- MySQL存储引擎中的MyISAM和InnoDB区别
- 论文笔记 |What makes for effective detection proposals?
- 购物车数量提醒
- Android那些事
- (OK)(OK) seem-tools_4_vbox-init-android-x86_64-6.0-rc1-0.sh
- IOS-TextField知多少