1、安装intelhaxm前,需要重启电脑进BIOS开启虚拟化选项。
2、批处理:javah用于自动生成JNI的C代码头文件,会将native为前缀的java方法生成相应的方法声明,参数栏目如:
-classpath src -d jni com.sword.wifiipfromjni.MainActivity
3、批处理:使用javap生成java方法签名,参数栏目如:
-classpath bin\classes -s com.sword.wifiipfromjni.MainActivity
4、如果在AndroidManifest.xml设置了
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="19" />,
那么需要在jni的Application.mk文件中设置:
APP_PLATFORM := android-15
5、真实手机设备调试,请将jni的Application.mk文件设置:
APP_ABI := armeabi-v7a,否则设置为x86。
6、开启debug调试模式:Application.mk设置:APP_OPTION := debug,且AndroidManifest.xml中设置Application的debuggable为True。
7、Android.mk增加系统库的支持:LOCAL_LDLIBS := -landroid -llog
8、调试NDK层代码单步调试,右键项目Debug As->Android Native Application。
9、MK文件输出信息:$(warning $(XXX)) 或者$(error $(XXX))。
10、编译第三方SO文件,Jni文件夹的MK文件设置:
LOCAL_PATH := $(call my-dir)/
JNI_PATH := $(LOCAL_PATH)
#other so
include $(CLEAR_VARS)
LOCAL_MODULE := NETEC
LOCAL_SRC_FILES := ../jni/libNETEC.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := videoSender
LOCAL_SRC_FILES := ../jni/libvideoSender.so
include $(PREBUILT_SHARED_LIBRARY)
# Build pj for android
include $(JNI_PATH)/pjsip/android_toolchain/Android.mk
11、使用adb 输出日志:通常在SDK文件夹下的platform-tools文件夹中可找到adb.exe,
然后配置路径到系统环境变量PATH中,命令:
adb logcat -d -f /sdcard/swordlog.txt
12、关于CPU的类型,血泪屎,编译的so文件在应用运行时,某些功能导致程序直接崩溃,那么你需要看一下jni目标cpu类型与实际是否相符:armeabi、armeabi-v7a 表示cpu的类型,前一种是针对普通的或旧的arm cpu,后一种是针对有浮点运算或高级扩展功能的arm cpu。(加一句,看CPU类型可以用其他软件,请自行搜索)
在jni的Application配置以下宏:
APP_ABI := armeabi 或
APP_ABI := armeabi-v7a
13、编译so文件,提示异常:ld.exe: cannot find -lgnustl_static,又一个血泪屎,搞了一天,明知道很大可能是路径配置的问题,就是找不出来,死命搞jni文件夹下的Android.mk文件,后来一次偶然的新老版本文件对比中发现一处:LOCAL_LDLIBS := -llog -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi,顿时吓尿了,尼玛我没这路径啊,改为:
LOCAL_LDLIBS := -llog -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a
腰不酸了,腿不疼了,连so都分分钟生成了,我去。。。(各位童鞋请按照自己的路径及CPU类型对比设置)