如何根据android中的CPU能力加载不同的jni库?

如何根据android中的CPU能力加载不同的jni库?,第1张

概述我有几个jni动态库(*.so),它们与cpu能力有关,例如,一些libs支持armv7neoncpu,一些libs支持armv7vfpv3cpu,一些libs支持非armv7cpu.如何根据CPU能力动态加载它们?我尝试了以下代码,但无法正常工作.在这个解决方案中,我将3个libs版本放在安装包中,其名称如下:(原名是libavcod

我有几个jni动态库(* .so),它们与cpu能力有关,例如,一些libs支持armv7 neon cpu,一些libs支持armv7 vfpv3 cpu,一些libs支持非armv7 cpu.

如何根据cpu能力动态加载它们?

我尝试了以下代码,但无法正常工作.

在这个解决方案中,我将3个libs版本放在安装包中,其名称如下:
(原名是libavcodec.so)

> libavcodec_neon.so和libavutil_neon.so
> libavcodec_vfpv3.so和libavutil_vfpv3.so
> libavcodec_basic.so和libavutil_basic.so

但是libavcodec.so依赖于libavutil.so,因此loadlibrary函数将失败,因为它的名称已被更改.

也许我可以在加载之前将lib重命名为原始名称,怎么做?

   String cpu_ability = getcpuAbility();        if (cpu_ability.equals("cpuinfo_armv7_neon")) {        System.loadlibrary("avutil_neon");        System.loadlibrary("avcodec_neon");    }    else if (cpu_ability.equals("cpuinfo_armv7_vfpv3")) {        System.loadlibrary("avutil_vfpv3");        System.loadlibrary("avcodec_vfpv3");    }    else {        System.loadlibrary("avutil_basic");        System.loadlibrary("avcodec_basic");    }

解决方法:

我找到了解决这个问题的方法.

由于无法修改目录/ data / data /< appname> / lib,因此我将库复制到/ data / data /< appname> / files目录,并重命名.

例如,在armv7 neon情况下,我将libavcodec_neon.so复制到files目录,并将其重命名为libavcodec.so.其他lib也是如此.然后从files目录加载它们.

总结

以上是内存溢出为你收集整理的如何根据android中的CPU能力加载不同的jni库?全部内容,希望文章能够帮你解决如何根据android中的CPU能力加载不同的jni库?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117775.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存