相关疑难解决方法(0)

如何在Android Studio中包含*.so库?

我阅读了许多线程如何将*.so库添加到Android Studio,但它们都不起作用,特别是当涉及到文本点时:这不适用于较新的xxx(Android Studio,gradle,...)

我们能否重新开始吧.我有:

Android Studio 0.6.0

从项目结构我看到:

SDK位置:

/usr/share/android-studio/data/sdk
/usr/lib/jvm/default-java
Run Code Online (Sandbox Code Playgroud)

项目:

Gradle version 1.10
Android Plugin Version 0.11.+
Run Code Online (Sandbox Code Playgroud)

模块/应用程序:属性:

编译Sdk版本19构建工具版本19.1.0

依赖关系:

{dir=libs, include=[*.jar]} Compile

{dir=libs, include=[*.so]}  Provided

m com.android.support: appcompat -v7:19.+   Compile
Run Code Online (Sandbox Code Playgroud)

我得到了预先编译的*.so文件,并且在演示应用程序中它们正在运行.我必须更改应用程序的源代码,因此我需要使用相同的*.so文件进行重建.

android android-studio

109
推荐指数
6
解决办法
17万
查看次数

java.lang.UnsatisfiedLinkError: dlopen failed: library not found

我正在尝试使用 cmake 构建我的 Android(本机)项目(从它用于构建和运行良好的 gradle 实验插件迁移它)。

我有一些本机代码(将其称为“a”),它使用另一个外部预构建库代码(将其称为“b”),并且我将两者链接如下:(根据https://developer.android.com/studio /projects/configure-cmake )

cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -frtti -fno-common -fexceptions")

include_directories(
#a's include files' paths
#b's include files' paths)

file(GLOB_RECURSE A_SOURCES
#a's source files' paths)

add_library(a_lib SHARED ${A_SOURCES})
add_library(b_lib SHARED IMPORTED)
set_target_properties(b_lib PROPERTIES IMPORTED_LOCATION "b's .so path")
target_link_libraries(a_lib b_lib)
Run Code Online (Sandbox Code Playgroud)

我通过了编译和链接步骤,android studio 继续在我的设备上安装 APK。但是,启动后,该应用程序会冻结,并在 logcat 中显示以下内容:

E/ExceptionHandler: Uncaught Exception java.lang.UnsatisfiedLinkError: dlopen failed: library "libb_lib.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:989)
at java.lang.System.loadLibrary(System.java:1530)
at com.mm.projectname.model.libloadingclassname.<clinit>(libloadingclassname.java:99)
Run Code Online (Sandbox Code Playgroud)

我知道这是因为 b_lib 的 .so 不在 apk 中。我可以在 a 的共享库中看到 b 的符号和 …

android build cmake shared-libraries android-gradle-3.1.0

6
推荐指数
2
解决办法
8661
查看次数

将.so(预构建)库从另一个目录添加到APK

我正在尝试从另一个目录包含我的 .so 库。编译我的项目工作正常。但是当我运行它时,它给了我

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip 文件“/data/app/com.company.gimikapp-2/base.apk”],nativeLibraryDirectories=[/data/app/com.company.gimikapp -2/lib/arm、/vendor/lib、/system/lib]]] 找不到“libtheprebuiltlib.so”

我在 SO 中看到的常见解决方案是这样的:

sourceSets {
    main {
        jniLibs.srcDirs = ['src/main/jniLibs']
    }
}
Run Code Online (Sandbox Code Playgroud)

两者都尝试过

jniLibs.srcDirs = ['C:\\svn\\sys_libs']
Run Code Online (Sandbox Code Playgroud)

jniLibs.srcDirs = ['C:/svn/sys_libs']
Run Code Online (Sandbox Code Playgroud)

实际上如何将其指向 Android 项目之外的另一个目录?

这是我的 CMakeList.txt:

cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
            SHARED
            src/main/cpp/source/native-lib.cpp )
add_library(theprebuiltlib SHARED IMPORTED)
set_target_properties(theprebuiltlib PROPERTIES IMPORTED_LOCATION
            C:/svn/sys_libs/libtheprebuiltlib.so)
target_include_directories(
            native-lib PRIVATE
            src/main/cpp/source/
            C:/svn/sys_includes/)
find_library( log-lib
            log)
target_link_libraries( native-lib
            theprebuiltlib
            ${log-lib})
Run Code Online (Sandbox Code Playgroud)

这是我的 JNI 的 gradle 设置:

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
            }
            ndk { …
Run Code Online (Sandbox Code Playgroud)

android android-ndk

5
推荐指数
1
解决办法
3883
查看次数