<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Beiträge von Johannes Eder - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/author/tm081001/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/author/tm081001/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Thu, 01 Oct 2015 12:12:33 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://mobile.fhstp.ac.at/wp-content/uploads/2025/03/icon-120x120.webp</url>
	<title>Beiträge von Johannes Eder - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/author/tm081001/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Bitbucket Synchronisierung</title>
		<link>https://mobile.fhstp.ac.at/allgemein/bitbucket-synchronisierung/</link>
		
		<dc:creator><![CDATA[Johannes Eder]]></dc:creator>
		<pubDate>Mon, 14 Sep 2015 15:30:00 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5401</guid>

					<description><![CDATA[<p>Worum geht es bei der Bitbucket Synchronisierung? Ich wollte eine Möglichkeit finden, ein Git-Repository auf Bitbucket.org direkt mit unserem Webserver zu synchronisieren. Es sollte also beim &#8220;git push&#8221; (dem Veröffentlichen der lokal durchgeführten Änderungen im Projekt im Bitbucket.org Konto) ebenfalls die Webseite aktualisiert werden. Zurück an den Anfang: Das Webprojekt Grundsätzlich war es das Ziel, <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/bitbucket-synchronisierung/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/bitbucket-synchronisierung/">Bitbucket Synchronisierung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Worum geht es bei der Bitbucket Synchronisierung?</h1>
<p>Ich wollte eine Möglichkeit finden, ein Git-Repository auf Bitbucket.org direkt mit unserem Webserver zu synchronisieren. Es sollte also beim &#8220;git push&#8221; (dem Veröffentlichen der lokal durchgeführten Änderungen im Projekt im Bitbucket.org Konto) ebenfalls die Webseite aktualisiert werden.</p>
<p><span id="more-5401"></span></p>
<h1>Zurück an den Anfang: Das Webprojekt</h1>
<p>Grundsätzlich war es das Ziel, eine Lösung für einfache und sichere Zusammenarbeit an einem gemeinsamen Webprojekt zu ermöglichen. Das Webprojekt war in unserem Fall eine Laravel 5 (PHP-Framework) Applikation, an der von zwei Personen regelmäßig gearbeitet werden sollte.</p>
<p>Wir hatten für das Projekt lediglich den Live-Server zur Verfügung. Da wir beide auch so gut wie nie am gleichen Ort beim Entwickeln waren, kam eine direkte Bearbeitung der Dateien am Server so nicht in Frage. Wobei das ist eigentlich grundsätzlich keine gute Idee!</p>
<h1>Warum Git?<img decoding="async" class="size-full wp-image-5404 alignright" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/09/SourceTree-Logo.png" alt="SourceTree-Logo" width="233" height="53" /></h1>
<p>Beim gemeinsamen Arbeiten an einem Projekt ist gleich zu Beginn die Frage nach geeigneten Kollaborations-Tools aufgetreten.</p>
<p>Ich habe dabei sofort an Git denken müssen. Schließlich bietet die Versionierung mittels Git vielfältige Vorteile beim Arbeiten im Team. Für uns am wichtigsten waren wohl folgende:</p>
<ul>
<li>Git ist optimal für Teamarbeiten bei Software- und Webprojekten.</li>
<li>Es gibt sehr gute Client-Software (zB. SourceTree), welche für Windows und Mac OS X gratis verfügbar ist.</li>
<li>Es gibt Anbieter, die Gratis Git-Repositories anbieten (in unserem Fall: Bitbucket.org).</li>
</ul>
<h1>Bitbucket<img decoding="async" class="size-full wp-image-5403 alignright" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/09/Bitbucket-Logo.png" alt="Bitbucket-Logo" width="204" height="53" /></h1>
<p>Also wurde zu Beginn der Zusammenarbeit  die Versionierung mittels Git anhand eines Repository bei Bitbucket.org angelegt. So weit so gut!</p>
<p>Jetzt sind zwar die Quellcodes mittels Git versioniert, nur könnte jetzt natürlich jederzeit beim kopieren auf den Server Änderungen vom Kollegen überschrieben werden. Und wenn es nicht gleich auffällt, dann muss erst recht nach dem Fehler gesucht werden.</p>
<p>Also habe ich mir überlegt, wie man diese Fehlerquelle, die das Zusammenarbeiten in unserem Fall auch relativ unpraktisch gemacht hat, eliminieren kann.</p>
<p>Bei Bitbucket sah ich dann, dass es die Möglichkeit gibt, verschiedene Aktion automatisch bei bestimmten Auslösern auszuführen.</p>
<h3>Der POST-Hook<img fetchpriority="high" decoding="async" class="wp-image-5402 alignright" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/09/Bitbucket-Sync-1-300x255.png" alt="Bitbucket-Sync-1" width="300" height="255" /></h3>
<p>Mittels des POST-Hooks kann eine Service-URL angegeben werden. Dieser wird dann direkt nach einer Änderung im Repository angestoßen.</p>
<h3>Wie kann der POST-Hook eingerichtet werden</h3>
<ol>
<li>Go to the repository&#8217;s <img decoding="async" src="https://confluence.atlassian.com/bitbucket/files/304578655/settings.png" alt="" /> settings.</li>
<li>Click <strong>Services</strong> in the left-hand navigation.<br />
The <strong>Services</strong> page appears.</li>
<li>Select the <strong>POST</strong> service from the services dropdown.</li>
<li>Click <strong>Add service</strong>.<br />
A new section appears for the <strong>POST</strong> service.</li>
<li>Enter the URL where Bitbucket should send its update messages.</li>
<li>Press <strong>Save</strong>.</li>
</ol>
<p>Zur URL, die eingegeben werden muss, kommen wir am Ende &#8230;</p>
<h1>Wie aktualisieren wir jetzt aber die Webseite?</h1>
<p>Glücklicher Weise gibt es unter folgendem Link ein kleines PHP-Paket, das mittels minimaler Anpassung an der <strong>config.php </strong>genau das für uns macht.</p>
<p><a href="https://bitbucket.org/alixandru/bitbucket-sync">https://bitbucket.org/alixandru/bitbucket-sync</a></p>
<p>Die wichtigsten Schritte hier nochmals kurz zusammen gefasst:</p>
<ul>
<li>Die Quellcodes von <a href="https://bitbucket.org/alixandru/bitbucket-sync">https://bitbucket.org/alixandru/bitbucket-sync</a> herunterladen.</li>
<li>Die entpackten Quellen (1 Ordner /bitbucket-synch/) genau so samt des Ordners direkt ins Hauptverzeichnis am Webserver, der synchronisiert werden soll, laden.</li>
<li><strong>config.php.example</strong> in <strong>config.php</strong> umbenennen und nach den eigenen Bedürfnissen anpassen. Weitere Schritte erst nach der Einrichtung der config.php durchführen!!!</li>
<li>Schreibberechtigungen entsprechend der Anleitung in der config.php setzen. Der Ordner &#8220;<strong>commits</strong>&#8221; ist dabei jedenfalls der wichtigste, denn dort werden die temporären Commits von Bitbucket geladen. Test, in dem &#8220;gateway.php&#8221; mit dem Parameter &#8220;test&#8221; im Browser aufgerufen wird (You can test if this folder is writable by accessing the <code>gateway.php</code> script with <code>test</code> parameter in your browser (e.g., <code>http://mysite.ext/bitbucket-sync/gateway.php?test</code>)</li>
<li>Das Projekt muss einmal initial importiert werden. Dazu muss im Browser die URL der Webseite samt folgendem Teil aufgerufen werden: deploy.php?setup=my-project-name</li>
<li>Wer bis hier her kommt, kann mit dem Pushen der Änderungen beginnen. Die Webseite sollte mit minimaler Verzögerung am aktuellen Stand sein.</li>
</ul>
<p>Bitbucket-Sync lädt nun nach jedem &#8220;git push&#8221; automatisch eine ZIP-Datei vom Bitbucket Repository in den &#8220;commits&#8221; Ordner. Diese wird dann entpackt und in das eingestellte Verzeichnis geladen.</p>
<p>Die Webseite kann somit mit geringem Einrichtungsaufwand automatisch nach einem GIT Push (Veröffentlichen der Änderungen) aktualisiert werden!</p>
<hr />
<h3>Exkurs POST-Hook URL</h3>
<ul>
<li>Bitbucket-Sync benötigt Lesezugriff auf das Repository. Falls Ihr ein privates Repository habt, müsst ihr einen Benutzer mit Leserechten in den Einstellungen anlegen.</li>
<li>Es empfiehlt sich außerdem eine Authorisation Key als GET-Parameter in folgender Form zu übergeben:<br />
<code><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;">http://www.deine-url.at/bitbucket-sync/gateway.php?key=predefined-gw-key</span></code></li>
</ul>
<hr />
<p>&nbsp;</p>
<blockquote><p>FAZIT: Das Einrichten von &#8220;bitbucket-sync&#8221; dauerte sicher auch nicht länger, als diesen Beitrag zu verfassen. Und es läuft problemlos <img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p></blockquote>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><em>Quellen:</em></span></p>
<ul>
<li><a href="https://de.atlassian.com/software/sourcetree/overview">https://de.atlassian.com/software/sourcetree/overview</a></li>
<li><a href="https://www.sourcetreeapp.com/">https://www.sourcetreeapp.com/</a></li>
<li><a href="https://de.atlassian.com/software/bitbucket/overview">https://de.atlassian.com/software/bitbucket/overview</a></li>
<li><a href="https://bitbucket.org/">https://bitbucket.org/</a></li>
<li><a href="https://bitbucket.org/alixandru/bitbucket-sync">https://bitbucket.org/alixandru/bitbucket-sync</a></li>
<li><a href="https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html">https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html</a></li>
</ul>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/bitbucket-synchronisierung/">Bitbucket Synchronisierung</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Webservice für TYPO3-Datenzugriff</title>
		<link>https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/</link>
					<comments>https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/#comments</comments>
		
		<dc:creator><![CDATA[Johannes Eder]]></dc:creator>
		<pubDate>Mon, 14 Sep 2015 14:29:05 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=5386</guid>

					<description><![CDATA[<p>Um Produkte per EAN-Code-Reader von einer TYPO3-Webseite abzufragen, habe ich ein kleines Webservice geschrieben, welches mir per HTTP GET Produktdaten im Format JSON zurückliefert.  Vorkenntnisse für unsere ReST-API (ReST = Representational State Transfer) Ein ReST-Webservice stellt verschiedene Methoden über HTTP Parameter zu Verfügung. Die Methoden Das Interface von ReST ist generisch. Es müssen keine Protokoll-Konventionen bekannt <a class="read-more" href="https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/">Webservice für TYPO3-Datenzugriff</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Um Produkte per EAN-Code-Reader von einer TYPO3-Webseite abzufragen, habe ich ein kleines Webservice geschrieben, welches mir per HTTP GET Produktdaten im Format JSON zurückliefert.</p>
<p><span id="more-5386"></span></p>
<h1> Vorkenntnisse für unsere ReST-API</h1>
<p>(ReST = Representational State Transfer)</p>
<p>Ein ReST-Webservice stellt verschiedene Methoden über HTTP Parameter zu Verfügung.</p>
<h3>Die Methoden</h3>
<p>Das Interface von ReST ist generisch. Es müssen keine Protokoll-Konventionen bekannt sein, damit Client und Server sich verständigen können. Die folgende Aufzählung beschreibt die Bedeutung der HTTP-Methoden, wie sie von ReST verwendet werden.</p>
<ul>
<li><b>GET:</b> GET fragt die Repräsentation einer Resource ab. <i>Requests</i> sollten frei von Seiteneffekten sein. <i>GET Requests</i> können beliebig oft abgeschickt werden.</li>
<li><b>POST:</b> Mit POST kann einer Resource etwas hinzugefügt werden. Beispielsweise könnte eine Ware zu einem Warenkorb hinzugefügt werden. POST ist nicht frei von Seiteneffekten. Beispielsweise können durch einen POST Aufruf Felder in einer Datenbank verändert oder Prozesse auf dem Server gestartet werden.</li>
<li><b>PUT:</b> Neue Resourcen können mit PUT erzeugt, oder der Inhalt bestehender Resourcen kann mit PUT ersetzt werden.</li>
<li><b>DELETE:</b> Resourcen können mit DELETE gelöscht werden.</li>
</ul>
<h3>Zudem können noch verschiedene Datenformate für die Kommunikation verwendet werden:</h3>
<ul>
<li>JSON (JavaScript Object Notation)<br />
JSON wird zur Übertragung und zum Speichern von strukturierten Daten eingesetzt; es dient als Datenformat bei der Serialisierung. Insbesondere bei Webanwendungen und mobilen Apps wird es in Verbindung mit JavaScript, Ajax oder WebSockets zum Transfer von Daten zwischen dem Client und dem Server häufig genutzt.</li>
<li>JSON-P (JavaScript Object Notation mit Padding)<br />
JSONP (JSON mit Padding) ermöglicht die Übertragung von (JSON-)Daten über Domaingrenzen, ist jedoch mit Sicherheitsrisiken behaftet.</li>
<li>XML (Extensible Markup Language)<br />
XML ist eine Auszeichnungssprache und somit vielseitiger einsetzbar als JSON, das ein Datenaustauschformat ist. XML ist weiter verbreitet, wird jedoch von JSON aufgrund seiner Einfachheit dort zurückgedrängt, wo keine komplizierten Auszeichnungen notwendig sind.</li>
</ul>
<p>Wir benötigen in diesem Fall JSON-P.</p>
<h3>Was muss gemacht werden</h3>
<p>Grundsätzlich muss eine Anfrage samt aller Parameter entgegen genommen und nach abarbeiten des Scripts ein Antwort zurückgeschickt werden.</p>
<p>Zuerst werden die übergebenen Daten überprüft. In diesem Fall wird beim Aufruf der URL der Parameter &#8220;ean&#8221; erwartet.</p>
<pre class="brush: plain; title: ; notranslate">
if (isset($_GET&#x5B;&quot;ean&quot;])) {

 $ean = $_GET&#x5B;&quot;ean&quot;];

 // Hier wird dann die Logik ausgeführt (z.B. Daten aus der DB mittels &quot;ean&quot; holen)
 // Wichtig ist nur, dass am Ende ein valides Javascript Object übergeben wird. 
 // Dies erreichen wir, in dem die Rückgabe zuerst in einem Array gespeichert wird.

$response_array = {'id' =&gt; 1, 'title' =&gt; 'Mein Titel'};
}
</pre>
<p>Am Ende wird dieses Array dann mittels &#8220;json_encode($response_array)&#8221; als JSON ausgegeben. Falls ein JSON-P Rückgabe notwendig ist, muss das JSON mittels des &#8220;Callback&#8221; Werts aus der Anfrage übergeben werden.</p>
<pre class="brush: plain; title: ; notranslate">
//start output
$callback = $_REQUEST&#x5B;'callback'];

if ($callback) {
    //JSON-P
    header('Content-Type: text/javascript');
    echo $callback . '(' . json_encode($response_array) . ');';
} else {
    //JSON
    header('Content-Type: application/x-json');
    echo json_encode($response_array);
}
</pre>
<p>Entscheidend ist, dass die Daten mittels</p>
<pre class="brush: plain; title: ; notranslate"> json_encode(.....)</pre>
<p>übergeben werden!</p>
<div id="attachment_5395" style="width: 310px" class="wp-caption alignright"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-5395" class="wp-image-5395 size-medium" src="https://akirchknopf-21110.php.fhstp.cc/wp-content/uploads/2015/09/Postman-REST-300x188.png" alt="Postman-REST" width="300" height="188" /><p id="caption-attachment-5395" class="wp-caption-text">POSTMAN: Hilfreich um ReST-API&#8217;s zu testen</p></div>
<h1>Rückgabe der API testen</h1>
<p>Um die API zu testen, gibt es ein paar hilfreiche Tools wie zum Beispiel die Chrome Extension <strong>Postman, </strong>mit deren Hilfe das Testen etwas einfacher und schneller geht. Natürlich kann man aber auch problemlos über die Console mittels &#8220;curl&#8221; testen.</p>
<p>Wenn alles funktioniert, dann bekommt man als Belohnung für den Aufwand die Daten analog zu meinem Beispiel hier zurückgeliefert.</p>
<pre class="brush: jscript; title: ; notranslate">
{
&quot;getParams&quot;: {
&quot;ean&quot;: &quot;9009457092232&quot;
},
&quot;products&quot;: {
&quot;58766&quot;: {
&quot;uid&quot;: &quot;58766&quot;,
&quot;name&quot;: &quot;Breitverteilerdüse 4,5,6&quot;,
&quot;artnr&quot;: &quot;52816&quot;,
&quot;ean&quot;: &quot;9009457092232&quot;,
&quot;lagerplatz1&quot;: &quot;86.1.6&quot;,
&quot;lagerplatz2&quot;: &quot;21.27.2&quot;,
&quot;new&quot;: &quot;0&quot;,
&quot;top&quot;: &quot;0&quot;,
&quot;short&quot;: &quot;&quot;,
&quot;description&quot;: &quot;58766&quot;,
&quot;fotos&quot;: &quot;52816_bild.jpg,52816_skizze.jpg&quot;,
&quot;documents&quot;: null,
&quot;category&quot;: &quot;49947&quot;,
&quot;category_title&quot;: &quot;Breitverteiler Düse&quot;,
&quot;category_parent&quot;: &quot;49921&quot;,
&quot;productunit_description&quot;: &quot;pro Stück&quot;,
&quot;taxrate_percent&quot;: &quot;20&quot;,
&quot;price_onrequest&quot;: &quot;0&quot;,
&quot;price&quot;: &quot;57.50&quot;,
&quot;currency&quot;: &quot;1&quot;,
&quot;currency_symbol&quot;: &quot;€&quot;,
&quot;priceWithTax&quot;: 69,
&quot;category_breadcrumbs&quot;: &quot;Kategorie: &amp;gt; Hauptkategorien &amp;gt; Gülle &amp;gt; passend zu System Bauer &amp;gt; Breitverteiler Düse&quot;,
&quot;foto&quot;: &quot;http://www.geheimeurl.com/uploads/tx_itcshop/52816_bild.jpg&quot;,
&quot;skizze&quot;: &quot;http://www.geheimeurl.com/uploads/tx_itcshop/52816_skizze.jpg&quot;
}
</pre>
<p><span style="text-decoration: underline;"><em>Quellen:</em></span></p>
<ul>
<li><a href="https://de.wikipedia.org/wiki/JavaScript_Object_Notation#JSONP">https://de.wikipedia.org/wiki/JavaScript_Object_Notation#JSONP</a></li>
<li><a href="http://www.oio.de/public/xml/rest-webservices.htm">http://www.oio.de/public/xml/rest-webservices.htm</a></li>
</ul>
<hr />
<p>&nbsp;</p>
<h1>UPDATE</h1>
<p>Im Nachhinein würde ich sagen, dass es wohl etwas geschickter wäre, direkt TYPO3 zu bemühen, um die Daten auszuliefern. Dadurch gibt es dann auch Zugriff auf die Funktionen der Extbase-Erweiterung mit den Produkten. Es wäre dann bei Änderungen nicht nötig, die Funktionalität der API an die der Extension anzupassen, zumindest solange sich nur Hilfsfunktionen (wie Preisberechnung oder Versandkostenberechnung) ändern.</p>
<p>Dadurch, dass ich das jetzt händisch, ohne auf TYPO3 zurückzugreifen, erledigt habe, mussten natürlich sämtliche Ausnahmen und Berechnung nachgebaut werden.</p>
<p>Damit das beim nächsten Mal besser gelöst wird (oder falls es hier jemand liest und gleich richtig angehen möchte), stelle ich hier Links zu einer besseren Lösung bereit. Für TYPO3-Entwickler sei hier erwähnt, dass dafür &#8220;Extbase PHP based View&#8221; genutzt wird:</p>
<p><span style="text-decoration: underline;"><em>Quellen:</em></span></p>
<ul>
<li><a href="https://docs.typo3.org/typo3cms/ExtbaseFluidBook/latest/8-Fluid/9-using-php-based-views.html">https://docs.typo3.org/typo3cms/ExtbaseFluidBook/latest/8-Fluid/9-using-php-based-views.html</a></li>
<li><a href="http://wiki.t3easy.de/extbase-und-fluid/extbase-php-based-view/">http://wiki.t3easy.de/extbase-und-fluid/extbase-php-based-view/</a></li>
</ul>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/">Webservice für TYPO3-Datenzugriff</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/development/webservice-fuer-typo3-datenzugriff/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Gradle: Build-Automatisierung mit Android Studio</title>
		<link>https://mobile.fhstp.ac.at/allgemein/gradle-build-automatisierung-mit-android-studio/</link>
		
		<dc:creator><![CDATA[Johannes Eder]]></dc:creator>
		<pubDate>Sun, 12 Oct 2014 21:59:08 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<guid isPermaLink="false">https://akirchknopf-21110.php.fhstp.cc/?p=4631</guid>

					<description><![CDATA[<p>Mit der Entwicklung von Android Studio wurde von Google auf die Build-Automatisierung mittels Gradle gesetzt. Zu diesem Zweck ist das Android-Plugin für Gradle entstanden. Gradle ist in Android Studio vollständig integriert, sodass jedes neue Projekt automatisch mit den entsprechenden Build-Dateien für Gradle versehen wird. Gradle kann jedoch auch unabhängig von Android Studio eingesetzt werden. Mittlerweile gibt es <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/gradle-build-automatisierung-mit-android-studio/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/gradle-build-automatisierung-mit-android-studio/">Gradle: Build-Automatisierung mit Android Studio</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Mit der Entwicklung von Android Studio wurde von Google auf die Build-Automatisierung mittels Gradle gesetzt. Zu diesem Zweck ist das<strong> Android-Plugin für Gradle</strong> entstanden. Gradle ist in Android Studio vollständig integriert, sodass jedes neue Projekt automatisch mit den entsprechenden Build-Dateien für Gradle versehen wird. Gradle kann jedoch auch unabhängig von Android Studio eingesetzt werden. Mittlerweile gibt es für zahlreiche IDE&#8217;s ein entsprechendes Plugin, aber auch der Einsatz mittels Konsole ist möglich.</p>
<p><span id="more-4631"></span></p>
<p><strong>Was ist Gradle?</strong></p>
<p>Gradle ist ein Tool zur Build-Automatisierung und zum Build-Management. Es dient der Automatsierng von Builds, Tests, Publishing Deployment. Gradle nutzt dazu eine auf Groovy basierte domainspezifische Sprache (DSL)</p>
<p><strong>Welche Ziele werden mit Gradle verfolgt?</strong></p>
<ul>
<li>Einfache Wiederverwendbarkeit von Code und Ressourcen</li>
<li>Unterstützung von mehreren Build-Varianten einer Applikation</li>
<li>Konfigurieren, erweitern und anpassen des Build-Prozesses</li>
<li>Gute IDE-Integration</li>
</ul>
<p><strong><span id="Build-Dateien" class="mw-headline">Build-Dateien</span></strong></p>
<p>Gradle nutzt für einen einfachen Build hauptsächlich drei Dateien:</p>
<ul>
<li><i>build.gradle</i> – die auf der Gradle-DSL beruhende Definition des Builds mit allen Tasks und Abhängigkeiten eines Projekts (ein Multiprojekt hat pro Projekt eine solche Build-Datei, die durch Vererbung der Eigenschaften von ihrem „Vater“-Buildskript kurz gehalten werden können).</li>
<li><i>settings.gradle</i> (optional) – bei einem Multiprojekt werden hier die teilnehmenden Unterprojekte festgelegt.</li>
<li><i>gradle.properties</i> (optional) – eine Liste von Properties, die für die projektspezifische Gradle-Initialisierung eines Builds gültig sind.</li>
</ul>
<p>Gradle-Skripte können unmittelbar Groovy-Code enthalten oder durch eine Groovy-Klasse implementiert werden. Alternativ lassen sie sich als Build-Abhängigkeit aus einem Maven-Repository laden</p>
<h3 id="buildConf">Build-Konfiguration</h3>
<p>Die Build-Konfiguration wird in den Gradle Build-Dateien mit der Syntax und den Optionen von Gradle und dem Android Gradle Plugin definiert. Folgende Aspekte sind konfigurierbar:</p>
<ul>
<li><em>Build variants</em>. Es können mehrerer APKs mit unterschiedlicher Konfiguration aus einem Projekt erzeugt werden</li>
<li><em>Dependencies</em>. Die Abhängigkeiten werden von Gradle gehandhabt. Es unterstützt Projektabhängigkeiten, lokale Ahängigkeiten als auch Remote repositiories (z.B.: Maven, Ivy)</li>
<li><em>Manifest entries</em>.  Bestimmte Werte der Manifest-Datei können hiermit überschrieben werden (z.B.: &#8220;package name&#8221;, &#8220;minimum SDK version&#8221; und &#8220;target SDK verison&#8221;)</li>
<li><em>Signing</em>. Die erzeugten APK&#8217;s können automatisch signiert werden</li>
<li><em>ProGuard</em>. Dient dem automatischen verschleiern des Quellcodes (= Obfuscator)</li>
<li><em>Testing</em>. Es wird eine eigene Test-APK von den Test-Quelldateien im Projekt erzeugt. Die Tests können während des Build-Prozesses ausgeführt werden</li>
<li><em><strong>NEU:</strong> APK split.</em> Splits verfeinern die Möglichkeiten der &#8220;Build variants&#8221; bei Multi-APKs. Es gibt folgende Splits: Density split, ABI split.</li>
</ul>
<p><strong>Gradle Wrapper</strong></p>
<p>Der Gradle Wrapper ermöglicht es Gradle ohne lokale Installation zu nutzen. Stattdessen wird die entsprechende Version von Gradle beim ersten Build des Projekts heruntergeladen. Dadurch ist es auf einfache Art und Weise möglich unterschiedliche Gradle Versionen für unterschiedliche Projekte zu nutzen.</p>
<p>Der Gradle Wrapper besteht aus einer Batch-Datei für Windows, eines Shell-Skript für andere Betriebssysteme, einer JAR-Datei und einer Properties-Datei.</p>
<p><strong>Musterbeispiel: &#8220;build.gradle&#8221;</strong></p>
<pre class="brush: groovy; title: ; notranslate">
apply plugin: 'com.android.application'

android {
 compileSdkVersion 20
 buildToolsVersion &quot;20.0.0&quot;

 defaultConfig {
  applicationId &quot;at.itcenter.demoapp&quot;
  minSdkVersion 15
  targetSdkVersion 20
  versionCode 1
  versionName &quot;1.0&quot;
 }
 signingConfigs {
  release {
   storeFile file(&quot;myreleasekey.keystore&quot;)
   storePassword &quot;password&quot;
   keyAlias &quot;MyReleaseKey&quot;
   keyPassword &quot;password&quot;
  }
 }
 buildTypes {
  release {
   runProguard true
   proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
   signingConfig signingConfigs.release
  }
 }
}

dependencies {
 compile fileTree(dir: 'libs', include: &#x5B;'*.jar'])
 compile 'com.android.support:support-v4:20.0.0'
}
</pre>
<p><strong>Quellen:</strong></p>
<p>http://developer.android.com/sdk/installing/studio-build.html<br />
http://tools.android.com/tech-docs/new-build-system/user-guide<br />
http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits<br />
http://www.gradleware.com/android/gradle-the-new-android-build-system/<br />
http://www.gradle.org/docs/current/userguide/userguide_single.html<br />
http://www.gradle.org/docs/current/dsl/index.html<br />
http://de.wikipedia.org/wiki/Gradle</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/gradle-build-automatisierung-mit-android-studio/">Gradle: Build-Automatisierung mit Android Studio</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
