androidNDK環境的搭建和使用
我接觸jni的時候正在用android studio,所以我記錄一下在as上部署ndk環境的步驟。
首先先看一下大概步驟:
1,下載ndk
2,配置環境變數
3,配置as屬性
4,java測試程式碼
5,建立.h的標頭檔案
6,建立.c的測試c程式碼
7,生成so檔案
8,測試ndk環境
ok。接下來我們就來一步一步的實現。
1,下載ndk。這裡推薦使用as內部下載,google在中國也部署了伺服器,所以不用翻牆也可以下載。
2,配置as中ndk路徑。如果ndk路徑沒有自動新增,則點選select即可。並在local.properties配置檔案中檢查是否正確配置路徑。
配置檔案裡是你所下載ndk的路徑,我這裡是E:\sdk\ndk-bundle
3,配置ndk系統環境變數,並檢測
dos下命令:ndk-build;出現以下資訊說明配置成功
4,設定as。將ndk版本差異檢測過濾掉,要不然專案無法編譯。新增:android.useDeprecatedNdk=true
5,編寫呼叫c的java程式碼。注意:這裡如果方法名報錯,不用管他。
public class JniKit {
/**如果你的native方法報錯,沒關係,配置完成自然會編譯通過
* @param num
* @return
*/
public static native int calculate(int num);
static {
System.loadLibrary("JniDemo");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
6,生成呼叫本地方法的.h標頭檔案。用as自帶的Terminal工具來生成。
命令:
進入你專案的java資料夾下
cd app/src/main/java
com.lh.jni是你的完整包名,後面跟具體寫有呼叫c程式碼的java類
javah -jni com.lh.jni.JniKit
7,生成jni資料夾。用於存放.h和.c檔案
8,將步驟6中生成的.h檔案移動到jni資料夾下,並建立一個.c檔案來寫c程式碼
9,寫c的測試程式碼。
include中指向你建立的.h標頭檔案
Java_com_lh_jni_JniKit_calculate;Java_包名類名方法名(引數)
#include <com_lh_jni_JniKit.h>
JNIEXPORT jint JNICALL Java_com_lh_jni_JniKit_calculate(JNIEnv *env, jclass cls, jint num) {
return num * num;
}
- 1
- 2
- 3
- 4
- 5
10,在as中配置生成so檔案的資訊。
11,用Make Project 生成so檔案,然後執行專案。
到這裡我們就可以呼叫本地的c/c++程式碼了。
12,拿出專案so檔案,供其它專案使用。
13,activity,測試本地c程式碼的呼叫(這裡要注意的是,移到其他專案使用,必須把含有native方法的java檔案放在與生成so檔案的同包名下)
public class MainActivity extends AppCompatActivity {
private TextView test_jni_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test_jni_text= (TextView) findViewById(R.id.test_jni_text);
test_jni_text.setText("4*4="+JniKit.calculate(4));
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
到這裡,整個ndk環境的搭建、測試已經全部完成了。只有搭建好了jni環境,才能去編寫c/c++。
相關文章
- Android systrace環境的搭建和使用Android
- Mac下git的環境搭建和基本使用MacGit
- Maven環境搭建和介紹Maven
- RocketMQ 視覺化環境搭建和基礎程式碼使用MQ視覺化
- Flutter開發環境搭建和除錯Flutter開發環境除錯
- node環境搭建和vue-cli腳手架使用詳解Vue
- 【機器學習】在生產環境使用Kafka構建和部署大規模機器學習機器學習Kafka
- 從零搭建和配置OSX開發環境開發環境
- Jbpm4環境搭建和整合SpringSpring
- WebSphere MQ傳輸環境搭建和測試WebMQ
- 部落格專案環境搭建和Model設計
- MySQL InnoDB Cluster環境搭建和簡單測試MySql
- wnmp(windows+nginx+mysql+php)環境搭建和配置WindowsNginxMySqlPHP
- Go 之基礎速學 (一) 最簡環境搭建和 goland 的安裝使用GoLand
- (全)Python 的虛擬環境構建和jupyter notebook 中虛擬環境切換Python
- 手搭一個 React,Typescript,Koa,GraphQL 環境ReactTypeScript
- 「MoreThanJava」Day 1:環境搭建和程式基本結構元素Java
- androidndkAndroid
- Flutter 基礎(二)Flutter 開發環境搭建和 Hello WorldFlutter開發環境
- 資料倉儲元件:Hive環境搭建和基礎用法元件Hive
- ORACLE 12C DATAGUARD環境搭建和主從切換Oracle
- 十、.net core(.NET 6)搭建ElasticSearch(ES)系列之Java環境搭建和Node.js環境搭建ElasticsearchJavaNode.js
- Flutter基礎(二)Flutter最新開發環境搭建和Hello WorldFlutter開發環境
- TypeScript學習筆記(一)環境搭建和資料型別TypeScript筆記資料型別
- 帶你搭一個SpringBoot+SpringData JPA的環境Spring Boot
- 資料倉儲元件:HBase叢集環境搭建和應用案例元件
- 【NOIP複賽篇1】上機指南(一)環境搭建和執行
- Windows下搭載虛擬機器以及環境安裝Windows虛擬機
- vmware centos虛擬上面搭lamp環境,做埠對映CentOSLAMP
- 虛擬環境pipenv的使用
- WebDriver環境搭建使用Web
- Mac環境下本地svn的使用Mac
- 在nodejs環境裡使用瀏覽器環境下的document物件NodeJS瀏覽器物件
- 深入理解 Tomcat(一)原始碼環境搭建和 How Tomcat works 原始碼Tomcat原始碼
- 【SSH專案實戰】國稅協同平臺-2.環境搭建和整合
- (精華2020年6月24日更新)asp.net core3.1實戰篇 RabbitMQ的使用二(環境搭建和初步使用)ASP.NETMQ
- 使用dockerfile 部署lnmpr環境DockerLNMP
- 使用docker搭建laravel環境DockerLaravel