如何在运行Android Emulator时禁用加载库?

时间:2013-08-06 17:59:50

标签: android android-x86 bump

所以我已经开始为Bump开发,并且在他们的短视中他们不支持基于x86的Android设备/模拟器。只有ARM。

好吧,把小市场放在一边,对我来说这是一个很大的问题,因为我非常喜欢使用基于x86的仿真器进行开发,这是出于性能原因。

所以,(因为Bump在模拟器上毫无意义)如何在模拟器中运行时禁用Bump库的加载?

import com.bump.api.IBumpAPI;
import com.bump.api.BumpAPIIntents;

错误:

  

08-06 17:58:30.895:E / AndroidRuntime(1799):   java.lang.UnsatisfiedLinkError:无法从加载器加载android-api   dalvik.system.PathClassLoader [dexPath = /数据/应用/ com.xxxxxxxx-2.apk,libraryPath = /数据/ APP-LIB / com.xxxxxxxxx-2]:   findLibrary返回null 08-06 17:58:30.895:E / AndroidRuntime(1799):     在java.lang.Runtime.loadLibrary(Runtime.java:365)08-06   17:58:30.895:E / AndroidRuntime(1799):at   java.lang.System.loadLibrary(System.java:535)08-06 17:58:30.895:   E / AndroidRuntime(1799):at   com.bump.api.BumpAPI。(BumpAPI.java:122)08-06 17:58:30.895:   E / AndroidRuntime(1799):at java.lang.Class.newInstanceImpl(Native   方法)08-06 17:58:30.895:E / AndroidRuntime(1799):at   java.lang.Class.newInstance(Class.java:1319)

3 个答案:

答案 0 :(得分:0)

唯一的方法是在模拟器上运行时临时从应用程序中删除Bump Libraries和Bump相关代码,或者创建一个从Bump中删除Bump的重复应用程序(特别是在x86上运行)。即使您能够禁用凹凸库,android仍然会尝试执行使用这些库的任何代码,例如import com.bump.api.IBumpAPI;,这会导致崩溃=(

答案 1 :(得分:0)

虽然有点复杂,但您可以通过使用android库项目将项目拆分为多个相关项目来实现此目的。目前你可能有这样的东西

  1. 主项目 - 包括所有代码,凹凸库等。这是您在设备上运行的内容
  2. 您需要将应用分成3个单独的项目:

    1. 图书馆项目 - 这将包括原始主项目中的几乎所有代码,但凹凸库和相关代码除外。

    2. 设备项目 - 这将取决于库项目并添加凹凸库和相关活动。这就是您在设备上运行的内容。

    3. 模拟器项目 - 这取决于库项目。凹凸库和活动包含。这是您在模拟器中运行的内容。

    4. 该理论与having a paid and a free version of your app相同。除了付费和免费之外,你有碰撞和无碰撞。

答案 2 :(得分:0)

为什么不使用JNI在C中创建自定义库,以满足链接依赖性,并在目标模拟器的项目中使用它?

它类似于创建伪包装器或填充程序 - 例如:Java中的一个名为fooBar的函数,它由目标ARM的实际库使用,它可能有参数等并返回一些东西。在伪人工库中,使用fooBar创建一个,使用相同的参数并返回零或虚拟对象,目标是模拟器。

考虑到API和参数,功能名称等,这可能听起来非常尴尬。只是要注意,通过沿着这条路线走下去,任务将取决于Bump库使用和控制的API有多大,我在谈论本地.so编译的ARM版本。