如何解决java.lang.OutOfMemoryError 使用本机库打包 Android 应用程序
全部:
我有一个启用了 NDK-build 的 Android 应用程序,带有调试符号的本机共享库的大小约为 2G。在我的 Gradle 脚本中,有一个打包选项,
packagingOptions {
doNotStrip '**/*testcore*.so'
}
如果我注释掉块,我可以毫无问题地运行应用程序。如果我离开块来运行/调试应用程序,我将在打包任务期间遇到内存不足问题,如下所示:
Execution failed for task ':app:packageXXXXXXXXDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> java.lang.OutOfMemoryError (no error message)
我已尝试将文件 gradle.properites
中的内存增加到很大,
org.gradle.jvmargs=-Xmx8g
似乎没有太大帮助。我正在使用带有插件 4.0.1 的 Android Studio 4.1.1。 (它适用于 Android Studio 4.0.1 和 3.5.0)。
由于我们经常需要调试进入原生代码,所以我们需要在不剥离调试符号的情况下部署原生库。任何建议或解决方案?谢谢!
解决方法
我建议在打包 APK 时剥离符号,然后在调试时,通过使用 target symbols add <file>.so
将其添加到搜索路径 https://stackoverflow.com/a/38426653/5954246 或更简单的路径,让 LLDB 知道未剥离的二进制文件的位置。 LLDB 会自动将剥离后的符号文件映射到源代码,因此希望这可以正常工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。