Android NDK は LED 動的ライブラリをコンパイルして so を使用します

記事ディレクトリ

目次

記事ディレクトリ

基本情報

私のAS基本情報

gradle プラグインのバージョン

ハードウェア情報

基本知識

externalNativeBuild

具体的な手順

NDK ライブラリをダウンロードする

JNI関連のC言語コードとmkファイルを追加

local.properties で ndk パスを構成する

グラドル構成

externalNativeBuild を構成する

ダイナミック ライブラリをパッケージ化する

 サードパーティの so ライブラリを参照する

 異常な問題

 最終効果表示


基本情報

私のAS基本情報

Android Studio ドルフィン | 2021.3.1 パッチ 1ビルド#
AI-213.7172.25.2113.9123335、2022 年 9 月 30

ビルドGC: G1 Young 世代、G1 Old 世代メモリ: 3048Mコア数: 12レジストリ:     external.system.auto.import.disabled=true     ide.text.editor.with.preview.show.floating.toolbar=false     ide.windowSystem.autoShowProcessPopup =true     ide.tooltip.initialDelay=695








バンドルされていないプラグイン:
    org.intellij.plugins.markdown (213.6777.22)
    com.alibaba.p3c.xenoamess (2.1.1.5x-SNAPSHOT)
    color.scheme.GapStyle (4.1)
    GsonFormatPlus (1.6.1)

gradle プラグインのバージョン

ハードウェア情報

モデル: JY61

  1. 製品のデフォルトは、シリアル通信インターフェイスのボー レート 9600 です。
  2. 電源:DC12V±10%
  3. 主にLEDライトの点滅と常時点灯に使用

基本知識

externalNativeBuild

build.gradleexternalNativeBuild使用される場所は内側defaultConfigと外側の2 箇所ですdefaultConfig

defaultConfig 外の externalNativeBuild 内の cmake は、CMakeList.txt のパスまたは Android.mk のパスを指定します (この章では src/main/jni/Android.mk を使用します) defaultConfig 内の externalNativeBuild 内の cmake は主
にCMake コマンド パラメーター。つまり、引数のパラメーターは最終的に実行可能な CMake コマンドに変換されます。

具体的な手順

NDK ライブラリをダウンロードする

[設定] に SDK と入力して下の画像を見つけ、クリックして指定された ndk パッケージをダウンロードします。

JNI関連のC言語コードとmkファイルを追加

以下に示すように、app/src/main に jni ディレクトリを作成します (ここでは詳しく説明しません)。

local.properties で ndk パスを構成する

ndk.dir=E\:\\AndroidStudio\\sdk\\ndk\\21.4.7075529

グラドル構成

指定されたバージョンに対応し、バージョンは同じでなければなりません

android {
    ndkVersion "21.4.7075529"
}

出力動的ライブラリ ファイルの名前と構造を構成する

defaultConfig {
    ...
    ndk {
            //输出指定三种abi体系结构下的so库。
            moduleName "libserial_port"
            abiFilters  "armeabi-v7a", "x86"
        }
}

externalNativeBuild を構成する

これは非常に重要で、追加するだけで動的ライブラリを正常にパッケージ化できます。

externalNativeBuild {
        ndkBuild {
            path 'src/main/jni/Android.mk'
        }
}

ダイナミック ライブラリをパッケージ化する

[プロジェクトを作成] をクリックすると、最初のコンパイルで対応する動的ライブラリが app\build\intermediates\merged_native_libs に生成されます。

 

 サードパーティの so ライブラリを参照する

 動的ライブラリ フォルダーとファイルを libs ディレクトリにコピーします。

libs 構成をアプリの build.gradle に追加します

android {
....
sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
}
....

コードは動的ライブラリを参照します: System.loadLibrary("serial_port"); //非常に重要

最後はapkをパッケージ化することです

異常な問題

動的ライブラリを参照した後、パッケージ化された apk はエラーを報告します。

タスク ':app:mergeApp_onlineReleaseNativeLibs' の実行に失敗しました。

 2 files found with path 'lib/x86/libserial_port.so' from inputs:
      - D:\Demo\app\build\intermediates\merged_jni_libs\app_onlineRelease\out
      - D:\Demo\app\build\intermediates\ndkBuild\app_onlineRelease\obj\local
     If you are using jniLibs and CMake IMPORTED targets, see

 解決策は、次のコードをコメントアウトして、通常どおりにパッケージ化することです

 最終効果表示

おすすめ

転載: blog.csdn.net/piyangbo/article/details/129126972