c# - 为什么 MonoDroid 找不到我的程序集?

标签 c# android xamarin.android xamarin-studio

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

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

接下来,我将保存已打补丁的 .dll,将 .apk 中的原始文件替换为已打补丁的文件,对 .apk 进行签名和 zipalign,最后我将使用 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我更改了一个方法的代码,将打补丁的.dll注入(inject)到apk中,对apk进行签名和zipaligned。它再次不起作用,但在启动时崩溃,我现在得到:

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 在 Release模式或 Debug模式下生成的 apk,似乎没有任何区别。我尝试使用项目 bin 文件夹中的 apk 版本和我使用 adb pull 从手机中提取的版本。

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

我想做的事情有可能吗? 非常感谢任何帮助。

最佳答案

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

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

关于c# - 为什么 MonoDroid 找不到我的程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22528654/

相关文章:

c# - 多用户嵌入式数据库

c# - 在 C# 中使用/空格验证文件路径

android - 从 Android 手机获取图像和视频到自定义图库

android每10分钟检测一次gps位置

android - Xamarin 上的 Realm 是否支持并发(非嵌套)写入事务?

c# - 使用 View 或存储过程在 Azure 移动应用程序中进行离线数据同步

c# - 运算符 '?' 不能应用于类型 'T' 的操作数

c# - 实现提供者模式?

java - 运行 runnable 后应用卡住

android - RelativeLayout 不尊重父边界