我想使用来自另一个 Android项目的现有本机库,所以我只是将NDK构建库(libcalculate.so)复制到我的新Android项目中.在我的新Android项目中,我创建了一个文件夹libs/armeabi/并将libcalculate.so放在那里.有没有 JNI /文件夹.我的测试设备有ARM架构.
在我的java代码中,我通过以下方式加载库:
static{
System.loadLibrary("calculate");
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的新Android项目时,我收到错误:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Run Code Online (Sandbox Code Playgroud)
所以,正如错误所说,复制的本机库不在/ verdor/lib或/ system/lib中,如何在我的情况下解决这个问题?
(我解压缩了apk包,在lib /下有libcalculate.so)
==== UPDATE =====
我还尝试在项目根目录下创建一个jni /文件夹,并在jni /下添加一个Android.mk文件.Android.mk的内容是:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libcalculate
LOCAL_SRC_FILES := libcalculate.so
include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
然后,在项目根目录下,我执行了ndk-build.之后,armeabi /和armeabi-v7a /目录由ndk-build生成(文件夹中有libcalculate.so).
然后我运行我的maven成功构建项目.在最终的apk包中,有:
lib/armeabi/libcalculate.so
lib/armeabi-v7a/libcalculate.so
Run Code Online (Sandbox Code Playgroud)
但是当我运行我的应用程序时,同样的错误抛出:
java.lang.UnsatisfiedLinkError: ...
nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libcalculate.so"
Run Code Online (Sandbox Code Playgroud) 我必须在我的Android应用程序中使用优酷播放器库并执行所需的一切.加入YoukuPlayerConfig我的Application班级
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
YoukuPlayerConfig.setLog(false);
YoukuPlayerConfig.setClientIdAndSecret(CLIENT_ID_WITH_AD, CLIENT_SECRET_WITH_AD);
YoukuPlayerConfig.onInitial(this);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的AndroidManifest.xml文件中添加所有权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
Run Code Online (Sandbox Code Playgroud)
但收到此错误:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.randa.android-1/base.apk"],nativeLibraryDirectories=[/data/app/com.randa.android-1/lib/x86, /data/app/com.example.android-1/base.apk!/lib/x86, /system/lib, /vendor/lib]]] couldn't find "libnetcache.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:972)
at java.lang.System.loadLibrary(System.java:1530)
at com.youku.uplayer.NetCache.<clinit>(NetCache.java:17)
at com.youku.uplayer.NetCache.SetUserAgent(Native Method)
at com.youku.uplayer.PlayerNetCache.setUserAgent(PlayerNetCache.java:32)
at com.youku.cloud.playercore.PlayerCoreManager.initNetCache(PlayerCoreManager.java:48) …Run Code Online (Sandbox Code Playgroud) 使用aviary android sdk使用android studio和gradle build.应用程序生成在具有32位架构的所有设备上运行正常.
相同的应用程序在64位设备中给出以下错误[例如.索尼C4]
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file
"/data/app/com.myapp/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libaviary_moalite.so"
Run Code Online (Sandbox Code Playgroud)
gredle.build部分
dependencies {
...
compile 'com.android.support:multidex:1.0.0'
compile 'com.facebook.fresco:fresco:0.8.1+'
compile 'com.facebook.fresco:imagepipeline-okhttp:0.8.1+'
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.adobe.creativesdk:image:4.0.0'
}
Run Code Online (Sandbox Code Playgroud)
参考那没用
使用Android Studio找不到ARM64 NDK本机库(1.3 RC)
如果使用任何解决方案,则出现相同的错
得到错误就像
Error:(16, 0) Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
Run Code Online (Sandbox Code Playgroud)
我不确定我在做什么错,或者根本不支持.