android - 使用 Android NDK 通过 CMake 构建共享库时遇到问题

标签 android android-studio android-ndk cmake

我从 Android Studio 获取了 Android native Activity 示例,并用我自己的 native Activity 实现替换了应用程序胶水实现。

这是我的 Cmake 文件,它与示例中的几乎相同:

cmake_minimum_required(VERSION 3.4.1)

#my implementation
add_library(android-impl STATIC
            C:/android_libs/native-impl/Activity.cpp
            )

# now build app's shared lib
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")

add_library(my-app SHARED
            main.cpp
            )

#add include directories

target_include_directories(my-app PRIVATE
                           C:/android_libs/native-impl/)

# add lib dependencies
target_link_libraries(my-app
                      android
                      android-impl
                      EGL
                      GLESv1_CM
                      log)

我还在 Android list 文件中指定了共享库的名称,如下所示:

    <!-- Tell NativeActivity the name of our .so -->
    <meta-data android:name="android.app.lib_name"
        android:value="my-app" />

它全部编译,但是当我在我的设备上运行时它立即抛出错误:

Caused by: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.nativetest.myapp-1/lib/arm/libmy-app.so

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nativetest.myapp/android.app.NativeActivity}: java.lang.IllegalArgumentException: Unable to load native library: /data/app/com.nativetest.myapp-2/lib/arm/libmy-app.so

我不明白,因为我从为 native Activity 提供的示例中复制了相同的 Cmake 文件,只是用我的实现替换了应用程序胶水,并为我的共享库使用了不同的名称。

以下是我使用的示例中的文件: Cmakelist.txt AndroidManifest.xml

还有什么需要修改的吗?

最佳答案

经过几个小时将我的代码与示例代码进行比较后,我终于找出了问题所在,这是由于缺少..一行代码而引起的。

问题似乎与 native Activity 实现有关,它使用回调,因为我不太了解发生了什么,我将链接到我找到的唯一解释: http://blog.beuc.net/posts/Make_sure_glue_isn__39__t_stripped/

因此,解决方案只是在您的 native Activity 实现中拥有一个空函数或其他任何内容(这是示例代码中的应用程序胶水),并且您需要通过共享库(您的主代码)调用它。

如果有人想更详细地解释,或者提供一个更好的替代方案,我们将非常欢迎。

关于android - 使用 Android NDK 通过 CMake 构建共享库时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652621/

相关文章:

java - 未找到 Gradle 方法 :'compile' 可能原因 : The Project

java - ANR 输入超时

android - 在android中显示和隐藏 View 动画

android - Systrace 输出错误

Android:应用内购买查询不返回任何产品(skuDetails)

android - 未找到 ID 为 'com.android.model.native' 的插件

Eclipse 中的 Android NDK::(无法运行程序 "ndk-build":未知原因)

android - 更新 guardianproject/openssl-android 中的 openssl 版本

android - Phonegap 模拟器错误 - 'emulate android' 不是 phonegap 命令

从 Windows 迁移到 Linux 后,Android Studio 项目中突然缺少 AndroidManifest.xml 文件?