日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)

發(fā)布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android Studio NDK 開發(fā)與調(diào)試(生成 .so 文件)

溫馨提示:如果你的 Android Studio 版本在 3.0以上 , 建議你用 cMake /ndk-build 的新姿勢進行 NDK 開發(fā) : https://developer.android.google.cn/index.html

AS與genymotionh和虛擬機的具體配置見:http://blog.csdn.net/qq_22605739/article/details/46711213

(1). 環(huán)境搭建與基本配置

見我的博客http://blog.csdn.net/darlingqiang/article/details/79049638

俗話說 “工欲善其事,必先利其器” ;所以咱還是得先下載 ndk;
下載地址 :https://developer.android.com/ndk/downloads/index.html
File-->ProjectStructure

如果你已經(jīng)下載,直接選擇你 ndk 的位置;
如果沒有下載,在紅色框這個位置會有位置提示你下載,點擊下載就行;
添加 ndk 后你會在 local.properties 這個文件看到(路徑取決于你 ndk 的位置):
接著進行下一步:
在此處加上這句代碼:android.useDeprecatedNdk=true    

(2).第二步. class文件的生成(java 代碼與 c 代碼編寫)

按照圖片中的指示找到對應的合適的位置建立Java類,首先新建個 java 類


public class JniTest{static {System.loadLibrary("jary");}public native String getString();
}

然后重新編譯下你的 Project: Build-->Make Project(Ctrl+F9)
KEY ONE:重新編譯之后就可以在對應的文件夾看到編譯后的 JniTest.class
sun@sun:~/AS/JniTest/app/build/intermediates/classes/debug/com/sun/jnitest(根據(jù)具體情況調(diào)整)

(3)下一步來看怎么生成 .h 的文件

在 studio 打開 Terminal 命令行工具,打開步驟是 View-->Tool Windows-->Terminal (Alt+F12)

在命令行中先進入到工程的 main 目錄下
輸入命令:javah -d jni -classpath 自己編譯后的 class 文件的絕對路徑

 ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。    stl "stlport_static"    //打開.c 的 debug , 下面第 4 點會講到}
KEY TWO 絕對路徑:javah -d jni -classpath javah -d jni -classpath ~/AS/JniTest/app/build/intermediates/classes/debug +具體
注意 debug 后面是有個空格的,如圖:

?

命令執(zhí)行后會在 main 目錄下(在哪個目錄下執(zhí)行就會在哪個目錄下生成 .h 文件)自動生成 “jni” 文件夾,

同時生成一個 .h 的文件

這個 .h 文件可不做修改 ;默認就行
現(xiàn)在我們來寫一個測試的 C 文件 jary.c 同 .h 文件一樣放到 jni 文件夾下,代碼如下:

 
// Created by sun on 18-1-14. // #include <jni.h> #include "JniTest.h"  JNIEXPORT jstring JNICALL Java_JniTest_getString (JNIEnv *env,jobject jobject1){ return (*env)->NewStringUTF(env,"Hello Jni !") }

依賴剛才生成的 .h 頭文件 ; 方法名與 .h 里面方法名保持一致 ;
最后在 在app中的test中的 build.gradle里面的

defaultConfig 中添加如下代碼


 ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。    stl "stlport_static"    //打開.c 的 debug , 下面第 4 點會講到}

到這里,jni 調(diào) C 就完成了,現(xiàn)在我們來測試一下,寫個 TextView 顯示一下調(diào)用的 C:


public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tvJni = (TextView) findViewById(R.id.tvJni);tvJni.setText(new JniTest().getString());
}
}

效果如下圖 :

(4). 生成 .so 以及調(diào)用

編譯后的 .so 文件如下圖路徑:

根據(jù)這個路徑就可以找到指定輸出的三種體系結構下的 .so 文件,然后把 .so 文件復制出來,如下圖所示的放到 jniLibs 文件夾下

注意: 放到 jniLibs 文件夾下面,build.gradle 里面 不用配置

還有一種方式是將 .so 文件 放在 libs 文件夾下面,注意在 build.gradle 添加如下配置:

4. 關于ndk開發(fā)在 .c 文件里面的 debug

首先在 build.gradle 中添加如下代碼 :


android {... ...defaultConfig {... ...ndk {   moduleName "jary"         //生成的so名字    abiFilters "armeabi", "armeabi-v7a", "x86"  //輸出指定三種abi體系結構下的so庫。    stl "stlport_static"    //打開.c 的 debug (此句是打開的debug的關鍵)}}buildTypes {debug {    jniDebuggable true //此句不加在真機上 debug 不受影響,但是在虛擬機上不能 debug}}

配置后如下圖 ,會出現(xiàn)一個 app-native,選擇此項你就可以盡情的 debug 了

debug 如下圖

總結

以上是生活随笔為你收集整理的NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。