91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用ndk-gdb調試AS下的Native程序

發布時間:2020-08-03 15:29:13 來源:網絡 閱讀:1053 作者:minepub 欄目:移動開發

1.Create Android Studio Project

  (1)新建一個Empty Activity工程:TestNDK

  (2)在工程的主Activity中加入對.so的引用.這步很關鍵,將System loadLibrary放入主Activity,是讓程序啟動后立刻加載.so,否則后面調試時,會有些麻煩

    static {

        // Load native library to invoke chreographerCallback().

        System.loadLibrary("DebugNDK");

    }

public native String  stringFromJNI();

  (3)使用javah生成相應的.h文件

     在Android Studio的Terminal窗口中輸入:

cd app\src\main\java             #進入工程的app\src\main\java目錄

javah stable.testndk.MainActivity  #生成.h文件,stable.testndk是包名,MainActivity是native函數所在的類名

 

接下來就可以編譯NDK了,NDK編譯完再回來

   

   (4)將NDK編譯出的libs目錄下的文件copy到app\libs目錄下,如下:

   app\libs\armeabi\

                         gdb.setup

                         gdbserver

                         libDebugNDK.so

   app\libs\armeabi-v7a\

                         gdb.setup

                         gdbserver

                         libDebugNDK.so

   app\libs\mips\

                         gdb.setup

                         gdbserver

                         libDebugNDK.so

   app\libs\x86\

                         gdb.setup

                         gdbserver

                         libDebugNDK.so

 

   (5)修改app\build.gradle,在android下加入如下代碼,告知jniLibs所在目錄

    sourceSets {

        main() {

            jniLibs.srcDirs = ['libs']

        }

    }

   (6)rebuild工程,可以通過Build->Build APK來生成APK,然后用7Zip看一下里面是將.so打包進去了.

   

接下來進入第三步調試NDK

   

2.NDK程序的編譯

(1)以 android-ndk-r10b\samples\hello-jni為模板,建立自己的NDK程序(DebugNDK).

   自己的程序需要修改Android.mk文件,增加工程及代碼文件,這里將所有的hello-jni更改為DebugNDK.

   修改DebugNDK.c中的jni對外接口函數名,修改為上面使用javah到處的.h中的相應函數(Java_stable_testndk_MainActivity_stringFromJNI).

(2)編譯.so

   在windows命令行下,進入工程目錄(TestNDK目錄),輸入如下命令:

   ndk-build NDK_DEBUG=1         #注意事先要將ndk-build所在目錄設置到系統環境變量中

   之后開始編譯,最終在工程目錄下會生成libs和obj兩個目錄,其中libs目錄下的是發布到硬件的.so, obj下是用于調試的,后面會用到.

   

好了到此可以回到 上面個 Create Android Studio Project 的第4步了.

3.NDK調試

服務器端配置

(1)在手機上運行TestNDK程序

(2)將編譯NDK程序時生成的gdbserver pull到手機(我是放到/data/data/stable.testndk.

    gdbserver在app\libs\x86\下,可以將其放到手機 /data/data/stable.testndk/lib 下

    在windows命令行下,執行:

    adb push .\app\libs\x86\gdbserver /data/data/stable.testndk/lib/

(3)在手機上啟動gdbserver并attach你想調試的進程,并指定監聽調試命令的端口(此端口是手機上的端口)

    在windows命令行下,執行:

    adb shell  #進入手機

    cd /data/data/stable.testndk/lib

    ps | grep stable.testndk  #查看要調試進程的PID

    gdbserver :1818 --attach 19906   #:1818是端口號,19906 是進程ID

此時,終端終端上會顯示:

    Attached; pid = 19906

Listening on port 1818

   

臺式機端配置

(1)使用adb做端口映射,將pc機上的端口定向到手機上gdbserver監聽的端口

   adb forward tcp:1818 tcp:1818   #端口映射,將pc機的1818端口映射到手機的1818端口

(2)將設備上的app_process32拉到臺式機,用于gdb調試.

   adb pull /system/bin/app_process32 ./

(3)使用android-ndk-r10b\toolchains下的gdb客戶端去連接gdbserver,gdb的類型要選擇針對手機平臺的,由于我使用的手機是x86 PC模擬器,因此要選擇:

   android-ndk-r10b\toolchains\x86-4.8\prebuilt\windows-x86_64\bin\i686-linux-android-gdb.exe

   并且gdb版本要和gdbserver一致。(可以通過--version來確認)

   

   在windows命令行下,執行如下命令,app_process32_path 表示app_process32所在目錄。

   android-ndk-r10b\toolchains\x86-4.8\prebuilt\windows-x86_64\bin\i686-linux-android-gdb.exe {app_process32_path}\app_process32

   上面的命令執行完后,便進入gdb命令模式了(命令行前有(gdb)),然后執行:

   target remote :1818 #連接本地的:1234端口,此端口已經和手機的1234端口做好映射。

   set solib-search-path {solibpath}   #加載所有的動態連接庫,solibpath的路徑位置可以參考:NDK編譯輸出文件 gdb.setup 中的"set solib-search-path XXX"的目錄,但注意要使用絕對目錄.

   #我的是set solib-search-path D:/Android/android-ndk-r10b/samples/TestNDK/obj/local/x86

   然后用info shared命令查看是否libDebugNDK.so的符號庫已經加載,我的顯示的是:

   0xaabd92e0  0xaabd93c8  Yes D:\Android\android-ndk-r10b\samples\TestNDK\obj\local\x86\libDebugNDK.so   #如果符號庫未加載則在Yes后有個(*).

   

(4)設置斷點,開始調試

   在gdb模式,執行:

   b Java_stable_testndk_MainActivity_stringFromJNI  #設置斷點

   c  #運行

   

   然后在函數調用時,斷點就可以停住了! Over!


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江孜县| 西乌| 资源县| 忻州市| 赤峰市| 富蕴县| 华蓥市| 清河县| 西林县| 临潭县| 永康市| 南雄市| 靖远县| 太康县| 措勤县| 合山市| 神池县| 临猗县| 泾川县| 昌宁县| 龙州县| 龙门县| 景德镇市| 江门市| 普宁市| 常熟市| 象山县| 朝阳市| 延庆县| 洱源县| 壤塘县| 太仓市| 铜川市| 胶南市| 塔城市| 岑溪市| 怀来县| 德庆县| 柯坪县| 英超| 阳信县|