問題タブ [android-native-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - JNI ラッピング - 関数がエクスポートされない
Android アプリケーションで使用するために、c ライブラリ (OpenAL-MOB) のいくつかの関数をラップしようとしています。
関数が正しくエクスポートされていないと思います。
私が取ったステップ:
- Android アプリケーションで使用したい関数を含む Java クラスを作成しました。
- javah と javac を使用してスタブを作成しました (これを行った後、クラス名またはパッケージ名を変更していません)。
- ラッパー ファイルを Android.mk に追加しました
- .so ライブラリをビルドする (ndk-build を使用)
- .so ファイルを Android プロジェクトの libs/armeabi-folder にコピーしました
- 私のAndroidコードにライブラリをロードし、ネイティブ関数を呼び出しました-> unsatisfiedinkerror.
Android コードでライブラリを使用しようとすると、ライブラリをロードできますが、ラップされた関数が見つかりません。
私の関数は実際にはエクスポートされていないと思います。
ラッパー関数を追加するために、OpenAL-MOB プロジェクトに既に存在していた Android.mk を変更しました。ビルド中にエラーは発生しませんでした。私がした唯一のことは、LOCAL_SRC_FILES の最後に 2 つのファイル (javah によって作成された .c とヘルパー クラス) を追加することでした。
Android.mk
NM を使用して、エクスポートされた関数を確認しました (nm.exe -D libopenal.so)。これが結果でした:
正しいかどうかはわかりませんが、機能が不足しているようです。私ができることや確認できることを知っている人はいますか?.mk ファイルに問題はありますか?
私はこのライブラリを数日間ラップしようとしていますが、かなり必死になっています。どんな助けでも大歓迎です!
編集: ライブラリを最初に静的ライブラリとして構築し、次に共有ライブラリとして構築することに関係があると思います。そのような共有ライブラリを作成すると、すべてのシンボルが失われるようです。誰かがこれについて追加情報を教えてもらえますか?
android - ネイティブ ライブラリ (.so ファイル) をロードしようとすると java.lang.UnsatisfiedLinkError が発生する
Androidでビデオプレーヤーを開発しています。LGPL ライセンスでコードを使用する必要があるため、ネイティブ ライブラリをどこかに配置する必要があります。
jniLibs をロードするために、私はSystem.load()
. プロジェクト構造内のjniLibsフォルダーではすべて正常に動作しますが、別の場所ではプログラムが以下のエラーで終了します。
次のことを行いました:
マニフェスト:
主な活動:
次のエラーが表示されます。
私はGoogleで多くのことを調査しましたが、まだ解決方法がわかりません。
android - Android アクティビティのクラッシュ (DeadObjectException)
これが私のlogcatの詳細です。これで私を助けてください:
RecyclerView のスクロールを開始すると、この例外も発生します。この RecyclerView ビューに画像を読み込んでいます。どんな解決策でも大歓迎です。
更新されたクラッシュ レポートは次のとおりです。
android - dexguard で暗号化すると、実行時のネイティブ ライブラリの読み込みに時間がかかる
Android アプリケーションに dexguard を統合しました。すべてが正常に機能しています。
また、dexguard を使用してネイティブ ライブラリを暗号化しました。ここでの問題は、dexguard を適用すると、ネイティブ ライブラリをロードするのに数秒かかるのに対し、dexguard がないとすぐにロードされることです。-encryptnativelibraries
dexguard プロパティ ファイルから削除すると、すぐに読み込まれます。
実行時に .so ファイルを復号化するのに数秒かかると思いますか? それとも、それほど長くはかからないのでしょうか?
android - Android の obb フォルダーから .so ネイティブ ライブラリをロードする
obb 拡張にパックした .so ファイルがあります。約20メガバイトです。
私は使用しようとしています
ライブラリをロードします。しかし、私はエラーが発生します:
dlopen("/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so", RTLD_LAZY) に失敗しました: dlopen に失敗しました: "/storage/emulated/0/Android/obb/com. mypackage.myapp/libtest.so" セグメント 2: 許可が拒否されました
type=1400 audit(0.0:8): avc: denied { execute } for path="/storage/emulated/0/Android/obb/com.mypackage.myapp/libtest.so" dev="fuse" ino=367663176224 scontext =u:r:untrusted_app:s0 tcontext=u:object_r:fuse:s0 tclass=file permissive=0
そのため、実行可能ファイルをそこに置くことは許可されていないことに気付きました。
だから私の質問は、
1-これを行うには、ファイルをどこに抽出する必要がありますか?
2- どの関数呼び出しを行う必要がありますか?
ありがとうございました。
xamarin - EmbeddedNativeLibrary を使用する方法はありますか?
XamarinSolution
には、次のものがあります。
プロジェクト 1:
Android
アプリケーション プロジェクト (アプリケーション)。としてビルドされたAndroid
three を使用する古いアプリケーションがありました。これはうまく機能し、見つかりました。私はそれからライブラリを作りたかった。このため、新しいプロジェクトを作成しました。今、私のソリューションでは、この 2 番目のプロジェクトがあります。.so
AndroidNativeLibrary
.so
Library
プロジェクト 2:としてビルドされた
Library
プロジェクト。これは機能していません。にはも も含まれず、それを参照する Android アプリケーション プロジェクトにコピーされます。(ビルドプロセス中にアプリケーションのフォルダーに配置する通常のプロセスが何であるかはわかりません)したがって、.soライブラリはどこにもありません。見つけられません。アプリケーションプロジェクトに直接入れればうまくいくことはわかっていますが、これは醜い解決策です。.so
EmbeddedNativeLibrary
DLL
.so
.so
/lib
Dalvik
名前から判断するとEmbeddedNativeLibrary
、私の場合は役立つはずです。しかし、それは効果がありません。
ファイルをアプリケーションディレクトリに.so
埋め込ん.DLL
Library
だり、自動的にコピーしたりするにはどうすればよいですか?/lib
[編集]
以前に確認する必要がありましたが、ライブラリは実際には APK に含まれています。アプリケーションの実行時にそれらが見つからないだけです。不足しているライブラリや間違って参照されているライブラリと同じです。たぶん、それらを表示するための追加のステップがありますか?
android - パーミッション Android system/lib を変更してネイティブ ライブラリ データをロードする
Android システムにインストールされたアプリ、ネイティブ ライブラリを使用したアプリを作成し、次のコードを試してネイティブ ライブラリをロードします。
最初にこのエラーが表示されました:
java.lang.RuntimeException: java.lang.UnsatisfiedLinkError: dlopen に失敗しました: "/system/lib/liblinphone-armeabi-v7a.so" セグメント 2 をマップできませんでした: 許可が拒否されました
その後、私はこのコードを入れようとします:
しかし、同じエラーが再び表示されました。システム内のAndroidアプリからシステム/ライブラリにアクセスできるようにすることは不可能ですか、それとも私のコードが間違っていますか?