【问题标题】:AOSP Native Code Linking ErrorAOSP 本机代码链接错误
【发布时间】:2016-12-08 06:09:45
【问题描述】:

我创建了一个可以在 Android Studio 中完美运行的应用程序。如果我生成 AAR 和 APK 并使用这些文件,它们将再次正常工作。我可以在多台设备上安装 APK,并且运行良好。现在,当我在 AOSP 构建中安装 APK 时,我不断收到 java.lang.UnsatisfiedLinkError: 它指向调用我的本机方法的第一行代码。我将此链接用作参考Add .apk files in aosp。当我运行模拟器并单击我的应用程序时,它会崩溃并产生 UnsatisfiedLinkError。如果我使用我的 AAR 文件生成 APK,也会发生同样的事情。再次澄清一下,这只发生在 AOSP 中,当在 Android Studio 中使用 AAR 进行其他构建时不会发生这种情况,并且无论我安装它的设备如何,APK 总是可以工作。关于为什么会发生这种情况的任何建议都会很棒!

【问题讨论】:

  • 您不能直接在手机上安装 .aar 档案,因为它们用于图书馆项目。我猜你的意思只是 .apk 成就。
  • 对不起应该说我也尝试使用 Android.mk 中的 aar,AOSP 在其中生成 APK。以下位置包含从 AOSP /android/out/target/product/generic/data/app/MyApplicationName 生成的 APK。当我将此 APK 传输到我的手机时,它会在启动时崩溃,并出现同样的 unsatisfiedlinkerror。
  • 我也将 apk 添加到 /packages/apps/MyApplicationName
  • "我也把apk加到/packages/apps/MyApplicationName"上就够了。不用在/android/out/target/product/generic/data/app/MyApplicationNa‌​me里复制了,让构建系统来构建吧。
  • 你能把jni文件夹和Android.mk主文件里面的Android.mk贴出来吗???

标签: android android-source unsatisfiedlinkerror


【解决方案1】:

它指向调用我的本机方法的第一行代码。

听起来您正在构建包含本机库的应用程序,而您创建的 .APK 仅捆绑了 一些 架构类型。如果您有本机库,请确保包含所有架构类型(通常 x86 和 armv7 可以完成这项工作,但请始终先查阅兼容性检查表)并确保您使用的是 ABI splitting 正确的 APK

请咨询以下指南以确保您拥有the NDK integration set up correctly

【讨论】:

  • OP 正在讨论在 AOSP 中包含 apk,这与在正在运行的操作系统上部署应用程序不同。
【解决方案2】:

AOSP 试图从 system/lib vendor/lib 文件夹中找到我的 APK 使用的 .so 文件,因为它不存在所以导致 UnsatisfiedLinkError。因此,通过将 .so 对象文件目录添加到这些位置,APK 之后在模拟器中正常启动。这也可以通过修改 Android.mk 以及将这些行添加到文件中来实现。

包括 $(CLEAR_VARS)
LOCAL_MODULE := 我的文件
LOCAL_SRC_FILES := lib/myfile.so # 或您的 .so 所在的任何位置
LOCAL_MODULE_TAGS := 可选
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
包括 $(BUILD_PREBUILT)

【讨论】:

  • 感谢解决,是添加在Android主目录,mk还是jni目录下?
  • @sandeepmaaram 所有这些都将添加到您的 Android.mk 文件中,该文件将根据您的 LOCAL_SRC_FILES 生成一个 .so。您还可以在您正在构建的 AOSP 文件夹内的那些目录下手动添加生成的 .so 文件。
  • 非常感谢,从上面的代码“LOCAL_SRC_FILES := lib/myfile.so # 或您的 .so 所在的任何位置”最后一次查询在 .so 文件路径 aosp 中的含义,例如。出/目标/系统/lib/myfile.so。 jni文件夹下的Android.mk代码呢???提前致谢。
  • @sandeepmaaram lib/myfile 将只是 .so 对象所在位置的文件路径。假设它是应用程序的 android.mk 代码将驻留在应用程序的文件夹中。当您的 AOSP 再次开始构建映像时,它将进入文件夹并读取 Android.mk 文件
猜你喜欢
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 2016-06-10
相关资源
最近更新 更多