无法让MonoDroid 4.0.6 x86仿真或GoogleTV工作

时间:2012-04-13 21:20:26

标签: mono x86 xamarin.android google-tv

首先,我使用MonoDevelop 2.8.8.4与MonoDroid 4.0.6和Mono 2.10.9一起使用OSX 10.7.3。

所以我购买了MFA并创建了通用的“Mono for Android Application”项目进行测试。 我已经在Option / Build / MonoForAndroidBuild下的Advanced选项卡中检查了ABI到“armeabi”,“armeabi-v7a”和“x86”。 我还设置了要发布的版本。 然后我转到fileMenu中的Project / CreateAndroidProject来构建我的apk文件,我将用它上传到Logitech Revue GoogleTV设备或x86模拟器。

上传并运行应用程序后,我收到错误:: “应用程序AndroidTest(进程AndroidTest.AndroidTest)意外停止。请再试一次。”。

使用Android模拟器“API lvl 10 Intel Atom x86”时,我也会遇到同样的错误。 有没有人让MonoDroid在任何x86平台上工作?如果是这样,你使用的是哪个设置?您使用的是VirtualBox还是标准的AndroidEmulator?您还使用了什么API级别以及为实现它而设置的MonoDroid proj / sln设置是什么? 注意:我使用的proj适用于我的ARM安卓手机设备和ARM AndroidEmulator。

我还设置了AndroidManifest.xml标志::

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

当我使用“adb logcat”时,它会在x86 emulators上出错:“java.lang.UnsatisfiedLinkError:无法加载库:reloc_library [1311]:799找不到'atexit'......”

编辑 - 以下是在Logitech GoogleTV上运行应用程序时的logcat信息::

  

I / ActivityManager(193):开始:意图{   act = android.intent.action.MAIN flg = 0x10200000   来自pid的cmp = com.Reign.WaterDemo_Android / waterdemo_android.Activity1}   247 I / ActivityManager(193):启动proc com.Reign.WaterDemo_Android   用于活动com.Reign.WaterDemo_Android / waterdemo_android.Activity1:   pid = 2084 uid = 10060 gids = {1015} I / ActivityThread(2084):Pub   com.Reign.WaterDemo_Android。 mono_init :mono.MonoRuntimeProvider   D / AndroidRuntime(2084):关闭VM W / dalvikvm(2084):   threadid = 1:线程退出未捕获的异常(组= 0x66995778)   E / AndroidRuntime(2084):致命异常:主要E / AndroidRuntime(   2084):java.lang.UnsatisfiedLinkError:无法加载monodroid:   findLibrary返回null E / AndroidRuntime(2084):at   java.lang.Runtime.loadLibrary(Runtime.java:425)E / AndroidRuntime(   2084):在java.lang.System.loadLibrary(System.java:554)   E / AndroidRuntime(2084):at   mono.MonoPackageManager.LoadApplication(MonoPackageManager.java:24)   E / AndroidRuntime(2084):at   mono.MonoRuntimeProvider.attachInfo(MonoRuntimeProvider.java:22)   E / AndroidRuntime(2084):at   android.app.ActivityThread.installProvider(ActivityThread.java:3938)   E / AndroidRuntime(2084):at   android.app.ActivityThread.installContentProviders(ActivityThread.java:3693)   E / AndroidRuntime(2084):at   android.app.ActivityThread.handleBindApplication(ActivityThread.java:3649)   E / AndroidRuntime(2084):at   android.app.ActivityThread.access $ 2200(ActivityThread.java:124)   E / AndroidRuntime(2084):at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1054)   E / AndroidRuntime(2084):at   android.os.Handler.dispatchMessage(Handler.java:99)E / AndroidRuntime(   2084):在android.os.Looper.loop(Looper.java:132)E / AndroidRuntime(   2084):在android.app.ActivityThread.main(ActivityThread.java:4083)   E / AndroidRuntime(2084):at   java.lang.reflect.Method.invokeNative(Native Method)E / AndroidRuntime(   2084):在java.lang.reflect.Method.invoke(Method.java:491)   E / AndroidRuntime(2084):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:841)   E / AndroidRuntime(2084):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)   E / AndroidRuntime(2084):at dalvik.system.NativeStart.main(Native   方法)W / ActivityManager(193):强制完成活动   com.Reign.WaterDemo_Android / waterdemo_android.Activity1 D / dalvikvm(   193):GC_FOR_ALLOC释放324K,18%免费9559K / 11591K,暂停59ms   I / dalvikvm-heap(193):将堆(frag case)增长到9.816MB for   178700字节分配D / dalvikvm(193):GC_FOR_ALLOC释放9K,18%   免费9723K / 11783K,暂停59ms D / dalvikvm(193):GC_FOR_ALLOC已释放   117K,19%免费9606K / 11783K,暂停58ms I / dalvikvm-heap(193):成长   堆(frag case)为10.794MB,用于1155900字节分配D / dalvikvm(   193):GC_FOR_ALLOC释放2K,18%自由10733K / 12935K,暂停56ms   D / dalvikvm(193):GC_FOR_ALLOC释放<1K,18%免费10733K / 12935K,   暂停57ms I / dalvikvm-heap(193):将堆(frag case)增长到12.752MB   对于2054924字节分配D / dalvikvm(193):GC_FOR_ALLOC释放0K,   15%免费12740K / 14983K,暂停57ms W / ActivityManager(193):活动   ActivityRecord的暂停超时{66e1c680   com.Reign.WaterDemo_Android / waterdemo_android.Activity1} D / dalvikvm(   193):GC_CONCURRENT释放12K,15%免费12867K / 14983K,暂停1ms + 3ms

2 个答案:

答案 0 :(得分:2)

Google TV不支持NDK,因此MonoDroid Java框架无法加载libmonodroid.so库。目前没有可用的ABI。

Google TV上有针对NDK支持的功能请求:

http://code.google.com/p/googletv-issues/issues/detail?id=12

答案 1 :(得分:1)

这是一个已知的问题,影响所有x86仿真器中的Android应用程序的Mono,并且将在下一版Mono for Android中包含此修复程序。这是谷歌x86 ndk中的一个错误,据说已修复(但事实证明,它不是),所以我们不得不做一些解决方法。应用程序的调试版本应该正常工作,这应该只影响版本构建。