迅為開發板安卓JNI開發實戰教程使用編譯好的 so 庫

2020-12-14 北京迅為

轉自迅為開發板安卓JNI開發指南

硬體平臺:迅為iTOP-412開發板

B站搜索:北京迅為,免費觀看同步視頻教程:

上一小節我們已經編譯了 so 庫,那麼我們或者其他人拿到這個 so 後要怎麼使用呢?這一節我們通過寫

一個簡單的 app 來給大家演示下。

我們打開 AS,然後新建一個項目,選擇一個空的 Activity,如下圖所示:

這裡我要注意一下,我們的包名要和我們調用的 jni 庫的包名一樣,否則會出問題,之前我們在寫 jni 的時候,我們的包名如下圖所示:

包名:

那麼我們在新建工程的時候包名也要是這個,如下圖所示:

創建成功以後,我們找到我們新創建的這個工程的所在目錄,然後把我們之前編譯好的 so 庫放進去。

存放 so 庫的文件夾一定要為 jniLibs,名字不要改,如下圖所示:

Jnilibs 文件夾放的就是我們生成的 so 庫,如下圖所示:

然後我們點擊一下 AS 軟體的同步,如下所示:

同步完成以後就可以在工程目錄下看到我們這個 so 的文件夾了,如下圖所示:

然後我們在 MainActivity 裡面引用我們這個庫,我們添加以下代碼:

static {

System.loadLibrary("native-lib");

}

如下圖所示:

然後我們聲明一下方法,在 MainActivity.java 裡面添加以下代碼,代碼如下:

public native int LedOpen();

public native int LedClos();

public native int LedIoctl(int num,int en);

如下圖所示:

然後我們打開 activity_main.xml 文件,

然後刪掉以下代碼:

設置倆個 button,代碼如下:

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:gravity="center"

>

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="LED1 OFF" />

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginTop="87dp"

android:text="LED1 ON" />

</LinearLayout>

添加完如下圖所示:

然後打開 MainActivity.java,聲明倆個按鍵,並且在按鍵的點擊事件裡面打開設備節點和進行控制 led 燈

的操作,代碼如下:

聲明倆個按鍵:

private Button led1_on;

private Button led1_off;

按鍵的點擊事件

led1_on = (Button) findViewById(R.id.button1);

led1_off = (Button) findViewById(R.id.button2);

led1_on.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

LedOpen();

LedIoctl(1, 1);

}

});

led1_off.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

LedOpen();

LedIoctl(0, 0);

}

});

}

如下圖所示:

然後添加以下代碼:

import android.view.View;

import android.widget.Button;

如下圖所示:

然後我們連接開發板,這裡我們使用的是 IMX6Q 開發板安卓 4.4 系統,這裡一定要使用開發板,不然看不到點燈效果,連接好以後,我們點擊運行,如下圖所示:

然後我們就可以看到 app 已經成功安裝到了開發板上,並且可以控制 led 燈

相關焦點

  • 迅為迅為iTOP-i.MX6ULL 開發板-Mqtt 移植教程
    本文轉自迅為IMX6ULL開發板教程第第八十八章 編譯器:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 硬體平臺:迅為i.MX6ULL開發板
  • 「教程」北京迅為iMX6ULL開發板上配置 AP 熱點
    本文轉自迅為iMX6ULL開發板使用手冊第九十九章,使用的資料已經放到了開發板網盤資料中,路徑為:11_Linux 系統開發進階\99_章節使用資料。硬體平臺:迅為iMX6ULL開發板ap熱點所謂手機wlan熱點,也就是將網際網路分享給其它具備wlan功能的設備。手持設備可作為無線路由器使用,將無線網絡向外廣播,然後由其它具備wlan功能的設備來接收。手持設備將使用本身的數據聯機來執行此功能。
  • 【開發實錄】在鴻蒙開發板上使用Websocket(移植自librws庫)
    基礎:完成官方的快速入門教程雖然在web雙向通信中,除了使用ajax(單向輪詢)外,一般都推薦websocket,但網上關於websocket的實現代碼很少,而且大部分為js和java,很少有C語言。因為課程項目開發需要使用到websocket,就在網上尋找了挺久的,終於找到了這個庫。
  • 迅為i.MX6ULL 開發板開機進度條修改文檔
    轉自:迅為IMX6ULL開發板使用手冊第七十一章硬體平臺:迅為i.MX6ULL 開發板本章節介紹的是iTOP-iMX6ULL-修改開機進度條的顯示和修改步驟,使用的資料已經放到了開發板網盤資料中路徑為「11_Linux系統開發進階\71_章節_修改開機進度條修改文檔使用資料」。
  • 迅為iTOP-iMX6ULL 開發板-Python 移植
    本章節轉自迅為iMX6ULL開發板教程第九十二章,主要介紹 Python 如何移植到 IMX6ULL 開發板上。硬體平臺:迅為iMX6ULL開發板Python 是一門開源免費、通用型的腳本程式語言,它上手簡單,功能強大。
  • NDK開發_編譯的cpp引用到 其它so, Android.mk 的寫法
    如果我們編譯的so文件需要引用到其它的so文件,那我們來看下這時候的Android.mk 文件如何寫。
  • java基礎之理解JNI原理
    有了JAVA標準平臺的支持,使JNI模式更加易於實現和使用。/com/magc/jni/HelloWorld.java在該HelloWorld.java所在目錄下生成HelloWorld.class然後使用javah生成頭文件,命令:javah -jni com.magc.jni.HelloWorld在當前目錄下生成com_magc_jni_HelloWorld.h頭文件,此文件供C、C++程序來引用並實現其中的函數
  • 如何使用TensorFlow Hub的ESRGAN模型來在安卓app中生成超分圖片
    儘管可以使用傳統的插值方法(如雙線性插值和雙三次插值)來完成這個任務,但是產生的圖片質量卻經常差強人意。深度學習,尤其是對抗生成網絡 GAN,已經被成功應用在超分任務上,比如 SRGAN 和 ESRGAN 都可以生成比較真實的超分圖片。那麼在本文裡,我們將介紹一下如何使用TensorFlow Hub上的一個預訓練的 ESRGAN 模型來在一個安卓 app 中生成超分圖片。
  • JNI-Thread中start方法調用與run方法回調分析
    >gcc -shared -I /usr/lib/jdk1.8.0_241/include cn_tera_jni_JniTest.c -o libJniTest.so-dynamiclib、-shared:表示我們需要生成一個動態連結庫-I:之前在.h頭文件中我們需要引入jni.h
  • Java通過-jni調用c語言
    public class TestJNI {        static{            System.loadLibrary("diaoyong");  //程序在加載時,自動加載libdiaoyong.so庫            }         public native void set(int value);      //聲明原生函數。
  • 海思3559A開發經驗總結
    所以我就順其自然地想到了一個快速在PC開發的方法:使用arm64v8/ubuntu:xenial這樣的docker鏡像,不使用海思提供的交叉編譯工具,畢竟這樣我就可以很方便的,在PC上的docker使用apt-get install somepackages,不需要啥第三方庫都得自己用交叉編譯器擼一遍,然後很愉快地編譯pytorch,caffe,opencv這些我需要的第三方庫了。
  • c編譯器so easy,gcc c編譯器生成、使用動靜態庫
    第一章程序開發人員大多接觸過c編譯器,請注意,不要將c編譯器和編輯器弄混淆哦。本文對c編譯器的講解,同樣基於gcc c編譯器,本文主要目的在於對linux環境下gcc c編譯器生成和使用靜態庫和動態庫予以介紹。此外,本文為系列教程第一篇——基本概念篇,之後將帶來另外兩篇。
  • 嵌入式LINUX的Qt開發入門教程
    它和ARM的GUI開發差別有多大?如果你還一頭霧水,如果你想步入Qt開發的大門,來,這篇文章將為你打開Qt新世界大門。 1你了解Qt嗎? Qt是一種基於C++的跨平臺圖形用戶界面應用程式開發框架。如何跨平臺?上到伺服器上位機,下到嵌入式GUI,上天入地無所不能。
  • 教程| 如何用TensorFlow在安卓設備上實現深度學習推斷
    選自DataScience 作者:Chia-Chun 機器之心編譯 參與:Edison Ke、路雪 本文作者 Chia-Chun (JJ) Fu 是加州大學聖塔芭芭拉分校的化學工程博士。她在 Insight 工作的時候,在安卓系統上用 TensorFlow 部署了一個 WaveNet 模型。
  • 飛凌課堂丨開發板Python 移植教程
    最近經常有用戶諮詢飛凌開發板是否支持Python,由於Python語言的簡潔性、易讀性、可擴展性以及豐富的庫,因此Python語言及其眾多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數據、製作圖表,甚至開發應用程式。那麼如何在開發板上移植Python呢?
  • 音視頻開發之旅(17) JNI與NDK的學習和使用
    二、Java和Native交互流程JNI在Java類中通過native關鍵字聲明Native方法javac命令編譯Java類得到class文件通過javah命令(javah -jni class名稱)導出JNI的頭文件(.h文件)實現native方法編譯生成動態庫(.so文件)實現Java和C、CPP的相互調用
  • 【視頻】物聯網開發入門+項目實戰
    C語言的命名規範和一些編碼技巧  -- 11 C語言的人機互動,庫函數的使用及putchar  -- 12 printf的應用及重難點  -- 13 getchar,scanf應用及重難點講解02 嵌入式C語言高級
  • JVM 解剖公園:JNI 臨界區與 GC Locker
    但是,如何使用這些函數有很多限制。舉例來說,在使用簡單逐代回收算法情況下,如果將對象固定在年輕代裡,回收完成後就不能「忽略」年輕代中剩下的內容。而且也不能從這裡移動對象,因為這會破壞需要保持的對象。」固定包含指定對象的子空間「。同樣的,如果 GC 以 generation 為粒度進行回收,那麼這種方法無效。
  • stm32開發板哪個好
    2、Discovery探索套件板   STM32 探索套件是幫助新用戶探索STM32性能的入門工具,同時為項目工程師提供快速製作樣機的開發平臺。該套件包括演示特定器件特性所需的基礎設施。藉助HAL庫和綜合軟體示例,可從器件特性和附加價值中受益。通過擴展連接器,可連接器件的大多數I/O,並有助於連接附加硬體。
  • Arduino入門參考教程(1)基礎知識與開發環境篇
    Arduino學習筆記(1)   基礎知識與開發環境篇下面為大家介紹本文的食用指南。本文適用於10歲-沒上限年齡段的人食用。    Arduino IDE作為Arduino開發板的開發環境,Arduino開發板的程序需要在其開發環境中編寫,並要求滿足一定的語法規則,但大致還是跟隨C語言的語法規則。