• Noser.com
facebook
linkedin
twitter
youtube
  • NOSERmobile
    • Android
    • HTML 5
    • Hybrid Apps
    • iOS
    • Windows Phone
  • NOSERembedded
    • Medizintechnik
  • NOSERprojektmanagement
  • NOSERtesting
  • NOSERlifecycle
    • .NET Allgemein
    • Application Lifecylce Management
    • Apps
    • Architektur
    • ASP.NET
    • Azure
    • Cleancode
    • Cloud
    • Silverlight
    • Visual Studio / Team Foundation Server
    • Windows 8
    • Windows Presentation Foundation
  • NOSERinnovation
    • Big Data
    • Cloud
    • IoT
    • Operations Research
    • Augmented Reality
    • RFID, NFC, Bluetooth LE

Android Studio für Xamarin Entwicklung einsetzen

30. September 2016
Rehmann Christoph
1
android, Studio, Xamarin, Xamarin.Android

Mit Xamarin Studio und der Xamarin Integration in Visual Studio hat ein Entwickler gute Tools auf seiner Seite um schnell und einfach Android Apps zu entwickeln. Allerdings kommt die Unterstützung im Bereich des UI Designs nicht an Android Studio heran.

Warum Android Studio?

Der Layout Designer von Android Studio ist wesentlich ausgereifter und schneller. So hat der Designer von Xamarin oftmals Probleme bei Komponenten, die aus einer Support Library stammen. Besonders ärgerlich ist dies bei Komponenten, welche selber wiederum ein Layout enthalten, wie etwa der CardView.

screenshot

Vorschau im Layout-Designer, bei welcher der Inhalt der CardView nicht angezeigt wird.

Weiter ist in Android Studio die Refactoring-Unterstützung sehr gut und hilft beispielsweise Attribute schnell in einen eigenen Style auszulagern. Ergänzend kommt eine hervorragend funktionierende Autovervollständigung hinzu.
Nicht zu unterschätzen sind ausserdem die oftmals nützlichen Hinweise und Warnungen. Etwa wenn ein Text nicht in die Ressourcen ausgelagert wurde oder wenn unterstützende Attribute vergessen wurden, wie zum Beispiel die „contentDescription“ bei einem Bild.

lint-warnings

Nützliche Lint Warnings in Android Studio

 

Wie kann Android Studio für Xamarin Projekte verwendet werden?

Zuerst muss ein neues Android Projekt mit Android Studio erstellt werden. Anschliessend kann das Ressourcenverzeichnis auf das des Xamarin Projektes konfiguriert werden. Dies erfordert nur eine kleine Anpassung in der Gradle-Datei:

sourceSets {
    main {
        res.srcDirs = ['c:/users/christoph.rehmann/samples/xand101/Resources']
    }
}

Weiter kann es sinnvoll sein die Abhängigkeiten mit den aktuellen Support Libraries zu ergänzen (sofern diese Verwendet werden sollen):

dependencies {
	compile fileTree(dir: 'libs', include: ['*.jar']) 
	testCompile 'junit:junit:4.12' 
	compile 'com.android.support:design:23.4.0' 
	compile 'com.android.support:appcompat-v7:23.4.0' 
	compile 'com.android.support:support-v4:23.4.0' 
	compile 'com.android.support:cardview-v7:23.4.0' 
	compile 'com.android.support:recyclerview-v7:23.4.0'
}

Anschliessend können die Ressourcen aus dem Xamarin Projekt in Android Studio geöffnet und bearbeitet werden:

Screenshot von Android Studio mit geöffnetem Layout eines Xamarin Android Projektes

Vorschau einer CardView und deren Inhalt.

Fazit

In den letzten Monaten habe ich die Erfahrung gemacht, dass es sich durchaus auszahlt Android Studio für die Layout Bearbeitung parallel zu Visual Studio bzw. Xamarin Studio einzusetzen. An die oben genannten Vorteile gewöhnt man sich bei der täglichen Arbeit sehr schnell.
Obwohl Xamarin Studio und die Integration in Visual Studio steht’s verbessert werden, hinkt der Layout-Designer jedoch bei gewissen Dingen noch etwas hinterher. Dies lässt sich jedoch zum Glück ohne grosse Probleme umgehen.

Xamarin.Android Code Obfuscation

20. November 2015
Rehmann Christoph
6
Mobile, Xamarin.Android

Xamarin Android Apps werden mit C# entwickelt. Beim Kompilieren wird der C# Code in die Intermediate Language übersetzt und mit der Android Mono-Runtime zusammengepackt. Ein solches Assembly lässt sich relative leicht mit einem Tool wie ILSpy dekompilieren. Dabei kann praktisch der ganze Source Code wiederhergestellt werden. Es lassen sich Klassen-, Methoden- und Variablennamen einsehen.
Möchte man ein solches Reverse Engineering erschweren, wird oftmals zur sogenanntem Code Obfuscation gegriffen.

Dabei werden verschiedenste Methoden eingesetzt, um die das Reverse Engineering zu erschweren. Zu den gängigsten Methoden gehören zum Beispiel:

  • Äquivalente Formeln und konstante Transformationen:
    Konstanten werden anders kodiert und verschleiert.
  • Veränderung des Kontrollflusses:
    Etwa durch Hinzufügung von Jumps oder Switch-basierten State Machines wird versucht den Kontrollfluss der Applikation zu verschleiern.
  • Umbenennung:
    Durch Umbenennung von Klassennamen, Methoden- und Variablennamen wird erschwert den Zweck eines Code-Teils zu erkennen.

 

Allerdings kann mit Code Obfuscation ein Reverse Engineering nicht verhindert werden sondern lediglich zeitaufwändiger gemacht werden.

Einbindung in den Build Prozess

Es gibt eine Vielzahl Code Obfuscating Tools. Egal was für eines das man verwendet, das Einbinden in den Build Prozess gestaltet sich in der Regel ähnlich. Für das folgende Beispiel wird das gratis Tool ConfuserEx verwendet.

Zuerst musst die Xamarin.Android Projektdatei angepasst und um folgenden Eintrag ergänzt werden:

<Target Name="Obfuscate" AfterTargets="_CopyIntermediateAssemblies" Condition="'$(Configuration)' == 'Release'">
   <Exec Command="AndroidObfuscation.bat '$(SolutionDir)'" WorkingDirectory="$(SolutionDir)\TipCalculator\Obfuscation" />
</Target>

Im Debug-Build möchte man in der Regel kein Code Obfuscating betreiben, da ansonsten das Debugging nicht möglich ist und Stack Traces unleserlich sind. Daher sollte man mit Hilfe einer Condition sicherstellen, dass nur im Release-Build ein Code Obfuscating betrieben wird.

Die im oberen Beispiel genanngte AndroidObfuscation.bat Datei kann z.B. wie folgt aussehen:

echo "starting source code obfuscation"
Confuser.CLI.exe TipCalculator.crproj
echo "finished obfuscating source code"

echo "copy TipCalculator.Droid.dll"
del "..\TipCalculator.Droid\obj\Release\assemblies\TipCalculator.Droid.dll"
copy "..\Confused\TipCalculator.Droid\obj\Release\assemblies\TipCalculator.Droid.dll" "..\TipCalculator.Droid\obj\Release\assemblies\TipCalculator.Droid.dll"
del  "..\Confused\TipCalculator.Droid\obj\Release\assemblies\TipCalculator.Droid.dll"

echo "finished copying obfuscated assemblies"

Diese führt ConfuserEx aus und ersetzt anschliessen die Assemblies.

Fazit

Es ist relativ einfach ein Code Obfuscating für eine Xamarin.Android App einzurichten und so zu konfigurieren, dass dies für jeden Release-Build ausgeführt wird.

1234567

Tag Cloud

.NET android Angular AngularJs app Arduino ASP.Net automated testing Azure Big Data C# C++ Cloud continuous integration Elm Embedded gRPC Internet of Things IoT Java Javascript M2M OWASP Projektmanagement protobuf Python Raspberry Pi Reactive Programming REST Scrum Security Softwarequalität SPA Testen testing Testmanagement Teststrategie Visual Studio WebAPI windows WPF Xamarin Xamarin.Android Xamarin.Forms Xamarin.iOS

Archive

Current Posts

  • Virtual pty/tty uart listener: Pitfalls on linux socat
  • Akzente setzen mit der Android Splash Screen API unter .NET MAUI
  • Do You have Your Personal Space?
  • Automated provisioning with ARM Templates
  • Asynchrone Beobachtungen und Versprechungen in Angular

Last Comments

  • Hans Reinsch bei Der Safety-Plan: Die wichtigsten Antworten mit Checkliste
  • George H. Barbehenn bei Modeling Optocouplers with Spice
  • Noser Blog Touch-Actions in Xamarin.Forms - Noser Blog bei Mach mehr aus Animationen in Xamarin.Forms mit SkiaSharp
  • Noser Blog Focus on the Secure Storage service of Trusted Firmware (TFM) - Noser Blog bei First run of the Trusted Firmware (TFM) application
  • Noser Blog First run of the Trusted Firmware (TFM) application - Noser Blog bei Focus on the Secure Storage service of Trusted Firmware (TFM)

Popular Posts

Xamarin.Android Code Obfuscation

6 Comments

ManuScripts: Wenn jemand eine Reise tut... Funktionale Programmierung mit Elm - Teil 1 - Aufbruch

5 Comments

ManuScripts: Wenn jemand eine Reise tut... Funktionale Programmierung mit Elm - Teil 2 - Kein Picknick

4 Comments

Contact us

  1. Name *
    * Please enter your name
  2. Email *
    * Please enter a valid email address
  3. Message *
    * Please enter message
© 2013 NOSER ENGINEERING AG. All rights reserved. Datenschutz | Cookie-Richtlinie