Android StudioはSystemを使用する.loadLibrary()のいくつかの問題
4672 ワード
私は最近ずっとAndorid Studioとsdkを更新して、私は今3.6のAndroid Studioを使って、sdkのapiはすでに27に更新して、andorid 8.0
はい、他のことは言わないで、私の問題を話しましょう.私は今いくつかロードしています.soパッケージでは次のような問題が発生しました
apiが23より大きいと次のような問題が発生したり、参照が構成されていない場合にも次のような問題が発生します.
*APIが23より大きい場合に参照される最初の問題が解決する.soパッケージの問題*
発生した環境:このような問題は一般的にAndroid 6.0以上のシステムで発生し、具体的には他のapiバージョンにも存在し、主にapi>=23に集中している.
同じアプリをapi<=22のsdkの場合にコンパイルし、正常に動作し、フラッシュバックや存在しない.soライブラリのロードに失敗した場合、api>=23のsdkコンパイルを採用した場合、Android 6.0以上の携帯電話にインストールすると、広範囲にクラッシュや.soライブラリのロードに失敗したが、6.0以下の携帯電話は正常だった.
第一に、あなたのAPK target APIを先に23以下に下げて、もしできないならば更にコンパイルする時APIを23以下に下げて、また問題が発生して引き続き下げて、これはあなたの多くのAndroid Sdkの新しいコントロールが使えないことを意味します;
2つ目はあなたが持っていることです.soファイルのソースコード、Application.mkでAPP_を修正STL,再コンパイル.so、もし、もしあなたがソースがなければ、悲劇は、彼らが解決するのを待つか、最初の方法を採用するか、試してみることをお勧めします.APP_STL := gnustl_shared,
注:再コンパイルするには、ここに行ってみてください.http://www.cnblogs.com/linguanh/p/4624768.html*正しい参照方法soパッケージ* 加入.soパケット、libsの下に追加するか、jniLibsの下に戻る はパッケージを参照し、jniLibsのデフォルトパスをlibsに変更し、buildを直接変更する.gradle
javaファイルロードパッケージ
もう1つは、適合機種が使用する各cpuの下に1つを加えることである.soパッケージ
はい、他のことは言わないで、私の問題を話しましょう.私は今いくつかロードしています.soパッケージでは次のような問題が発生しました
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/device.android.com.hfdemo1-1/base.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_dependencies_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_0_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_1_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_2_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_3_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_4_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_5_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_6_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_7_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_8_apk.apk", zip file "/data/app/device.android.com.hfdemo1-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/device.android.com.hfdemo1-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libSerialPort.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
apiが23より大きいと次のような問題が発生したり、参照が構成されていない場合にも次のような問題が発生します.
couldn't find "libSerialPort.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
*APIが23より大きい場合に参照される最初の問題が解決する.soパッケージの問題*
発生した環境:このような問題は一般的にAndroid 6.0以上のシステムで発生し、具体的には他のapiバージョンにも存在し、主にapi>=23に集中している.
同じアプリをapi<=22のsdkの場合にコンパイルし、正常に動作し、フラッシュバックや存在しない.soライブラリのロードに失敗した場合、api>=23のsdkコンパイルを採用した場合、Android 6.0以上の携帯電話にインストールすると、広範囲にクラッシュや.soライブラリのロードに失敗したが、6.0以下の携帯電話は正常だった.
Catch :dlopen failed: cannot locate symbol "XXXX" xxxx.so, XX , 。
第一に、あなたのAPK target APIを先に23以下に下げて、もしできないならば更にコンパイルする時APIを23以下に下げて、また問題が発生して引き続き下げて、これはあなたの多くのAndroid Sdkの新しいコントロールが使えないことを意味します;
2つ目はあなたが持っていることです.soファイルのソースコード、Application.mkでAPP_を修正STL,再コンパイル.so、もし、もしあなたがソースがなければ、悲劇は、彼らが解決するのを待つか、最初の方法を採用するか、試してみることをお勧めします.APP_STL := gnustl_shared,
注:再コンパイルするには、ここに行ってみてください.http://www.cnblogs.com/linguanh/p/4624768.html
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
private void load() {
try {
System.loadLibrary("xxxxx");
} catch (Throwable e) {
Log.d("zzzzz"," xx :"+e.toString());
}
}
もう1つは、適合機種が使用する各cpuの下に1つを加えることである.soパッケージ
|---arm64-v8a
|---xxxxx.so
|---armeabi
|---xxxxx.so
|---armeabi-v7a
|---xxxxx.so
|---x86
|---xxxxx.so
|---x86_64
|---xxxxx.so
|---mips
|---xxxxx.so
|---mips64
|---xxxxx.so