原文路徑:
http://blog.sina.com.cn/s/blog_ad64b8200102vnxl.html
目錄
開發環境
IDE: android studio 1.1.0
android NDK :R10
android SDK : android -19
編寫hello_jni程序
建立一個空的activity項目目錄如圖:
進入下圖標紅的文件 MainActivity文件中
添加如下代碼在MainActivity類內
static {
System.loadLibrary("hello_jni");
}
public native String getstringfromC();
打開終端android studio已經提供了終端如圖:
javah -d ../jni com.example.root.ndk_sample.MainActivity
com.example.root.ndk_sample.MainActivity是native函數的所在的包名和類名,中間使用“.”號分開。
這時候就會在java目錄下面出現jni目錄如圖:
添加*.c文件在jni目錄中如圖:(文件名字為hello_jni.c)
備注:紅色方框內的只是為了方便演示調試使用,沒有額外的功能。
編寫Android.mk和Application.mk 放在jni目錄下面。
結構如圖:
Android.mk文件的內容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=hello_jni
LOCAL_SRC_FILES := hello_jni.c
include $(BUILD_SHARED_LIBRARY)
Application.mk 文件內容為:
APP_ABI := all
APP_OPIM :=debug
配置ndk的目錄配置文件為圖中標紅的地方。
在最后一行添加如下內容:
ndk.dir=
配置
在紅色的方框內的文件夾下的紅條出添加如下配置:
ndk{
moduleName"hello_jni"
}
在下圖中
在紅色的方框內的文件夾下添加藍色的內容。
在如下圖中:
在紅色的MainActivity中的oncreate函數中添加藍色的函數。
此時android調用C語言的的函數已經完成了,此時運行結構如下圖:
運行結果
但是想要調試還要做好多的事情。
調試程序
在如下圖中:
在紅框內的文件中添加藍色的部分(在android{}內)。
在下圖中:
在文件androidMainfast.xml中的application 的藍色框內添加android:debuggable="true"。
配置編譯
將上圖中的jni 的debuging配置為true。
在終端中進入jni目錄下面執行命令
ndk-build
目錄結構會有如下變化。(紅色方框內)
在進行調試之前在調用到C語言的函數處打一個斷點,如圖:
點擊debug(紅色框內)開始調試:
此時進入main目錄下面執行如下命令。
ndk-gdb
之后會出現如下的信息:
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-linux-gnu --target=arm-linux-android".
For bug reporting instructions, please see:
---Type to continue, or q to quit---
.
warning: Could not load shared library symbols for 86 libraries, e.g. libstdc++.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
0xb6f0a794 in __futex_syscall3 ()
from /root/AndroidStudioProjects/NDK_Sample/app/src/main/obj/local/armeabi-v7a/libc.so
(gdb) l
執行“l”命令輸入如下
1 #include
2
6 JNIEXPORT jstring JNICALL Java_com_example_root_ndk_1sample_MainActivity_getstringfromC
7 (JNIEnv *env, jobject obj)
8 {
9 int i = 0,j = 0,k = 0;
打一個斷點在第十行命令如下:
b 10
在android studio 單步走,這個時候就會進入斷點出,之后就可以執行gdb可以使用的命令進行調試了。
《完結》