記事ディレクトリ
目次
local.properties で ndk パスを構成する
基本情報
私の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
- 製品のデフォルトは、シリアル通信インターフェイスのボー レート 9600 です。
- 電源:DC12V±10%
- 主にLEDライトの点滅と常時点灯に使用
基本知識
externalNativeBuild
build.gradle
externalNativeBuild
使用される場所は内側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
解決策は、次のコードをコメントアウトして、通常どおりにパッケージ化することです