繁体   English   中英

为什么MonoDroid找不到我的组件?

[英]Why can't MonoDroid find my assemblies?

我使用Xamarin Studio 4.2.3创建了一个简单的Android HelloWorld应用程序,它除了在随机数大于0.5时打印出一些消息外什么都不做。 它在Nexus 4和Nexus 5上运行得非常好。

我正在做的下一件事是使用7Zip从应用程序的apk(来自程序集文件夹)中提取代码.dll。 使用.Net Reflector和Reflexil我正在修改一条指令,通常是由“if(rand.nextDouble()> 0.5){doStuff()}”中的IF语句生成的brfalse.s,以便它分支到在doStuff()调用之前的指令,从而有效地使IF语句无用并确保始终调用该方法。

接下来我将保存已修补的.dll,将.apk中的原始文件替换为已修补的文件,签名并压缩.apk,最后我将使用adb进行安装。

当我在手机上启动应用程序时,它会直接崩溃,LogCat会显示以下内容:

03-20 10:12:08.709: I/ActivityManager(764): Start proc HelloMonoLVL.HelloMonoLVL for activity HelloMonoLVL.HelloMonoLVL/hellomonolvl.hellomonolvl.TrialSplashScreen: pid=23099 uid=10128 gids={50128} 
03-20 10:12:08.729: D/dalvikvm(23099): Trying to load lib /data/app-lib/HelloMonoLVL.HelloMonoLVL-1/libmonodroid.so 0x427154a0
03-20 10:12:08.729: D/dalvikvm(23099): Added shared lib /data/app-lib/HelloMonoLVL.HelloMonoLVL-1/libmonodroid.so 0x427154a0
03-20 10:12:08.739: W/libc(23099): WARNING: generic atexit() called from legacy shared library 
03-20 10:12:08.759: W/monodroid-gc(23099): GREF GC Threshold: 46800 
03-20 10:12:08.769: A/monodroid-assembly(23099): Coult not load assembly 'HelloMonoLVL' during startup registration. 
03-20 10:12:08.769: A/monodroid-assembly(23099): This might be due to an invalid debug instalation. 
03-20 10:12:08.769: A/monodroid-assembly(23099): A common cause is to 'adb install' the app directly instead of doing from the IDE. 
03-20 10:12:08.789: I/ActivityManager(764): Process HelloMonoLVL.HelloMonoLVL (pid 23099) has died. 
03-20 10:12:08.789: W/ActivityManager(764): Force removing ActivityRecord{42752a50 u0 HelloMonoLVL.HelloMonoLVL/hellomonolvl.hellomonolvl.TrialSplashScreen t238}: app died, no saved state

由于这不起作用,我使用了LVL的C#端口。 构建了LVL示例应用程序,已部署并可在手机上运行。 我再次使用许可证验证码解压缩.dll,使用Reflexil我更改了方法的代码,在apk中注入了修补的.dll,签名并压缩了apk。 再次它不起作用,但在发射时崩溃,我现在得到:

03-20 10:21:19.049: D/dalvikvm(23507): Trying to load lib /data/app-lib/de.marius.lvl-1/libmonodroid.so 0x42711448 
03-20 10:21:19.049: D/dalvikvm(23507): Added shared lib /data/app-lib/de.marius.lvl-1/libmonodroid.so 0x42711448 
03-20 10:21:19.069: A/MonoDroid(23507): No assemblies found in '/data/data/de.marius.lvl/files/.__override__' or '/storage/emulated/0/Android/data/de.marius.lvl/files/.__override__'. Assuming this is part of Fast Deployment. Exiting... 
03-20 10:21:19.079: I/ActivityManager(764): Process de.marius.lvl (pid 23507) has died. 
03-20 10:21:19.079: W/ActivityManager(764): Force removing ActivityRecord{42bc3c60 u0 de.marius.lvl/.TrialSplashScreen t239}: app died, no saved state

如果我使用Xamarin在发布模式或调试模式下生成的apk,它似乎没有任何区别。 我尝试使用项目的bin文件夹中的apk版本以及我通过adb pull从手机中提取的版本。

我是Xamarin的新手所以也许我的方法很天真。 是否有类似哈希检查的东西,我修补的.dll没有通过? 我看到Reflexil有一个删除StrongNames的选项,我尝试了但是它似乎没有任何区别(但我必须承认我真的不知道那些是如何工作的)。

甚至可能我正在尝试做什么? 任何帮助都非常感激。

卸载项目中安装的所有软件包,包括android支持库,如Android.Support.v4支持库并清理解决方案。

然后再次重新安装所有必需的包和支持库并重建您的解决方案。 它可以帮助您整理查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM