首页 / C# / c# – Xamarin混淆
c# – Xamarin混淆
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Xamarin混淆,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2985字,纯文字阅读大概需要5分钟。
内容图文
![c# – Xamarin混淆](/upload/InfoBanner/zyjiaocheng/794/1e8f76bc926e41e19dd58411ddf57da9.jpg)
那里有什么东西可以混淆吗?我尝试过用于Android的Crypto Obfuscator,当我使用dex2jar解编译时,我发现混淆和正常汇编之间没有区别.到目前为止,我已经通过以下链接:
http://forums.xamarin.com/discussion/14962/light-obfuscation
Mono for Android, code obfuscation
解决方法:
您参考了xamarin.com上的论坛帖子(“Light Obfuscation”).在那里,我现在添加了一个如何使用Xamarin Studio和Babel for .NET进行混淆的解释.
我将在此重复一遍:
您无需使用完整的Visual Studio即可轻松,舒适地进行混淆.我现在使用Babel for .NET和Xamarin Studio(在Windows中).我没有试过让Babel在Mac上运行,也许它是可能的.
那么,在这里我将解释如何在Xamarin Studio中混淆您的Android应用程序:
好处是Xamarin Studio使用MSBuild机制,Babel可以集成在MSBuild进程中.
对我来说(安装Babel除外)只需要两个步骤:
(步骤1)
使用文本编辑器编辑.csproj文件. Xamarin Studio一定不能运行.
<Project>
[... All existing stuff ...]
<UsingTask TaskName="Babel" AssemblyName="Babel.Build, Version=6.4.0.0, Culture=neutral, PublicKeyToken=138d17b5bd621ab7" />
<Target Name="AfterBuild" Condition=" '$(Configuration)' != 'Debug' ">
<Babel InputFile="$(TargetPath)" OutputFile="$(TargetPath)" GenerateDebug="true"
[...]
RulesFiles="babel.xml"
SuppressIldasm="false" ObfuscateTypes="true" ObfuscateProperties="true" ObfuscateEvents="true" ObfuscateMethods="true"
ObfuscateFields="true" VirtualFunctions="true" FlattenNamespaces="false"
StringEncryption="true"
/>
</Target>
</Project>
每当您构建应用程序并且构建模式不是Debug(因此它是Release)时,将应用此任务.您可以指定一个xml文件,您可以在其中为混淆过程定义细粒度规则. (例如,排除某些类别等)
顺便说一句:经验法则是:将每个类,接口,委托或枚举定义为“内部”,而不是“公共”.默认情况下,组件外部必须可见的类型(公共类型)不会被混淆.默认情况下,内部类型将被混淆.我标记为“公共”的唯一类是“MainActivity”.
(第2步)
当我开始第一次尝试我的应用程序时,我收到以下错误消息:
BABEL : error : Could not resolve assembly: 'Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065'
我首先无法理解,因为一个Hello-World Android应用程序被混淆了没有问题.经过几个小时的研究,我找到了错误的原因.我的活动(我的游戏只有一个活动)具有以下属性:
[Activity(
Label = "The name of my game",
MainLauncher = true,
WindowSoftInputMode = SoftInput.AdjustPan,
ConfigurationChanges = ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.Orientation | ConfigChanges.ScreenSize
)]
原因是“Label”和“MainLauncher”不是问题所在.但是“WindowSoftInputMode”和“ConfigurationChanges”是问题所在.
为了解决这个问题,我从.cs文件中完全删除了[Activity(…)]属性,并手动将必要的信息添加到AndroidManifest.xml中.这样,混淆工作没有问题.
您可能想知道为什么Activity属性导致了问题.我意识到当使用“WindowSOftInputMode”和“ConfigurationChanges”将此属性应用于C#Activity类时,ILSpy也遇到了问题.所以我认为这不是巴别塔的问题,而是Xamarin的问题.原因可能是,虽然“Label”和“MainLauncher”是基本类型(字符串和bool),但其他两个则不是.它们的类型在Mono.Android.dll中定义,似乎以错误的方式引用.最好的办法是,如果Xamarin删除了编译后的dll的属性,因为它仅用于在构建步骤中创建AndroidManifest.xml.
内容总结
以上是互联网集市为您收集整理的c# – Xamarin混淆全部内容,希望文章能够帮你解决c# – Xamarin混淆所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。