【Android开发】NDK开发(3)-jni开发技巧
一、??????jni打印調試信息
1、 ? ?在Android.mk文件中添加: ? ?
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog2、 ? ? 在?.c文件中添加:
#include <android/log.h>3、 ? ? ?打印log信息:
__android_log_print(ANDROID_LOG_INFO, "INIT_GETGPSINFO", "get_gps_info");//或者 __android_log_print(ANDROID_LOG_INFO, "INIT_GETGPSINFO", "lan = %f", lan);?
二、??????對第三方?.so或?.so.1動態鏈接庫的調用
?如果在工程中用到了對第三方?.so或?.so.1鏈接庫的調用,直接調用庫中的方法名是行不通的,可以使用dlopen及dlsym函數,用法如下:
1 //打開鏈接庫 2 3 void *handle = dlopen("libapi.so.1", RTLD_NOW); 4 5 //聲明“本地”方法,第一個int是方法返回類型,get_number是方法名,第二個括號中的int是參數類型 6 7 int (*get_number)(int); 8 9 //將聲明“本地”方法與類庫中方法進行綁定,只寫方法名,不寫參數 10 11 get_number = dlsym(handle, "get_number"); 12 13 //方法調用 14 15 int a = 0; 16 17 int number = get_number(a);?
三、??????System.Load()函數的路徑
在(二)中,引用第三方的鏈接庫需要將其添加到工程中,但是使用方法System.LoadLibrary(“libapi.so.1”)?往往行不通,可以使用System.Load()方法。
? ? ?System.Load()方法需要提供鏈接庫的絕對路徑,這個絕對路徑是相對于Android的文件系統的,可以把libapi.so.1文件放在system/lib目錄,調用方法為:
System.load("/system/lib/libapi.so.1");?
四、??????使用adb push文件到Android文件系統
如果有需求要將文件拷貝到模擬器的文件系統中,那么你想到的方法可能是講模擬器root,但是,這一步往往比較困難,但是使用如下方法可以將文件拷貝到文件系統中,而不需要root。
1、?????????先新創建一個AVD “myAVD”
2、?????????在命令行輸入:
emulator -avd MyAndroid -partition-size 128 -no-snapshot-load3、?????????待模擬器完全打開之后,輸入以下命令以獲得對/system系統目錄的寫權限:
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock0 /system4、?????????使用push命令將文件拷貝到模擬器文件系統中(su為文件名):
adb push su /system/xbin/想要查看模擬器的文件系統,可使用adb shell命令進入模擬器的終端。
另:給文件執行權限:
adb shell chmod 06755 /system/xbin/su?
五、??????使用無線ADB
使用無線ADB,省去了數據線的鏈接方便極了!
如果項目有需求,Android需要同時連接PC和外部模塊,那么無線ADB會極大的方便你的程序調試。
?
?
2014-03-17?
轉載于:https://www.cnblogs.com/youthpasses/p/3845029.html
總結
以上是生活随笔為你收集整理的【Android开发】NDK开发(3)-jni开发技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5.2jquery案例2
- 下一篇: 真正爱你的女人是这样的