<?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>android &#8211; Hand-Picked</title>
	<atom:link href="https://hand-picked.io/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>https://hand-picked.io</link>
	<description>Top-notch remote software developers</description>
	<lastBuildDate>Wed, 03 Mar 2021 13:33:46 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6.16</generator>

<image>
	<url>https://hand-picked.io/wp-content/uploads/2019/04/cropped-logo_512-2-32x32.png</url>
	<title>android &#8211; Hand-Picked</title>
	<link>https://hand-picked.io</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Android Projects Like a Pro (Expert) – Part 2 &#8211; Business oriented</title>
		<link>https://hand-picked.io/android-projects-like-a-pro-part-2/</link>
					<comments>https://hand-picked.io/android-projects-like-a-pro-part-2/#respond</comments>
		
		<dc:creator><![CDATA[Cristian Duarte]]></dc:creator>
		<pubDate>Tue, 02 Mar 2021 19:36:49 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5668</guid>

					<description><![CDATA[In the first part of this series we saw some architectural aspects of implementing large scale Android projects. In this article, we&#8217;ll focus on the product and business aspects of them. Wireframing / Interface Design So you&#8217;ve come up with an idea. You create a new Activity or Fragment, a layout, some views &#8211;similar to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In the <a aria-label=" (opens in a new tab)" href="https://hand-picked.io/android-projects-like-a-pro-part-1/" target="_blank" rel="noreferrer noopener" class="rank-math-link">first part of this series</a> we saw some architectural aspects of implementing large scale Android projects. In this article, we&#8217;ll focus on the product and business aspects of them.</p>



<h2>Wireframing / Interface Design</h2>



<p>So you&#8217;ve come up with an idea. You create a new Activity or Fragment, a layout, some views &#8211;<em>similar to this other big App</em>-, so it shouldn&#8217;t be wrong, right? Soon you realize that this approach doesn&#8217;t scale well.</p>



<p>What if you needed to visualize different ideas without spending time compiling? What if a product manager intends to tell you an idea? Will he code? We wouldn&#8217;t expect that from the design team either.</p>



<p>Wireframing is the tool that comes in handy to represent visually your app (or website). Anyone may make a low-detail representation of the intended screen and the user flow. Some say wireframing is the skeletal outline of the app, which is very accurate: You may see that most wireframes are just black lines on a white canvas. Also, this helps in getting feedback about the interface before writing a single line of code.</p>



<figure class="wp-block-image size-large"><img src="https://balsamiq.com/assets/learn/articles/flow.png" alt="Balsamiq Mockups allows focusing on the business side of Android Projects with a simple low-res approach"/><figcaption><a href="https://balsamiq.com/wireframes/" target="_blank" aria-label="Balsamiq Wireframes (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Balsamiq Wireframes</a> fast, handwritten-like approach</figcaption></figure>



<p>Most tools these days offer the collaboration feature, where interfaces can be shared across the team or also might be edited collaboratively in real time. Also these tools may vary in terms of features, some will look more like skeletons (or even like hand-written), others with high-resolution (such tools may offer also exporting resources to use right away in your project), some others may implement &#8220;click-like&#8221; features to navigate the flow as if it were an app, or maybe support large canvases to cover an entire app (navigation flow) in just one screen.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://images.ctfassets.net/1khq4uysbvty/1i7cGmXoeCnP1uhXjmQPyW/8acf2ac8e9bf468208592455ae10318c/Prototyping_01.gif?&amp;w=523" alt=""/><figcaption><a href="https://www.figma.com/prototyping/" target="_blank" aria-label="Figma&#039;s (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Figma&#8217;s</a> prototyping, with interactions and animations</figcaption></figure></div>



<p>You may find some of these tools (and discipline) with different names, that may have a similar meaning: Wireframes, Mockups, Interface Design, Workflow design, UX Design or Screen Design to name a few.</p>



<figure class="wp-block-image size-large"><img src="https://images.ctfassets.net/w6r2i5d8q73s/7EisW4dm8ZlCLrgFN4Gcz/a0612e76550cec84b0f5da422e56f4cf/S_-_Wireframing.png" alt=""/><figcaption>Wireframing in <a href="https://miro.com/features/" target="_blank" aria-label="Miro (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Miro</a></figcaption></figure>



<p>Last but not least, a very and simple tool is always drawing interfaces using just pencil and paper. Before remote came in as a norm (by the way Hand-Picked was already remote before it was cool), teams used to draw interfaces on paper or whiteboards. I guess it will return in some way in the future but you can already use it by yourself if you have that task. Sometimes it&#8217;s kind of refreshing and satisfactory to see how a screen we drew on paper ended up in a final working product.</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-1024x683.jpg" alt="" class="wp-image-5690" srcset="https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-300x200.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Wireframing by hand</figcaption></figure>



<p>Note: In many teams the figure of a Product Manager (or Product Owners, or a mixed collaboration with designers) will be in charge of delivering Wireframes as an input for developers. Developers with wireframes and designs (if such Wireframes are low-res) would then be in charge of following that documentation. This doesn&#8217;t make this practice something exclusive to Product Managers or Designers. Be it your initiative within an existing project or you creating your own app, you will benefit from wireframing ideas before jumping in to your preferred IDE.</p>



<p>Note 2: Always try to make screens that have one important objective for the user. This will end up with simple to use interfaces that even our grandmas will be able to use (tech-savvy grandmas).</p>



<h2>A/B Testing</h2>



<p>We start getting serious, we mean business. What am I talking about? For any project, we (plus the stakeholders) will have an objective. Name it, more users, more engagement, more sales, more usage, it won&#8217;t matter if the software is for an NGO or it&#8217;s profit driven, all the endeavour will have a target to reach.</p>



<p>So in this process, new ideas will come up, and we will decide how to implement them. But, what if the idea has some cons that may happen to hurt the objective? Maybe we need that extra field in the registration screen for marketing purposes (so, more revenue); but will that affect Sign Ups in general with this additional nuisance? (Let&#8217;s face it, in mobile each extra field is kind of an effort for the user). How much will it hurt?</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img width="638" height="359" src="https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no.jpg" alt="" class="wp-image-5693" srcset="https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no.jpg 638w, https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no-300x169.jpg 300w" sizes="(max-width: 638px) 100vw, 638px" /><figcaption>Someone had to measure if changing the Hamburger Menu for a Tab Bar would work.</figcaption></figure></div>



<p>In most cases there will be no other chance to try it out (as you may have different public or business than some other studies, it won&#8217;t be enough to go and check some 3rd party stats). Here it comes, A/B Testing. This &#8216;technique&#8217; allows us to release features to a subset of users before applying it to all of them. So in case we see that the feature was successful, we would have a green light to rollout it to all users. To know if it was successful we&#8217;ll need to have implemented analytics in the app, something explained next in the article.</p>



<figure class="wp-block-image size-large"><img src="https://www.seobility.net/en/wiki/images/2/24/AB-Testing.png" alt=""/><figcaption>AB Testing &#8211; Author: Seobility &#8211; License:&nbsp;<a class="rank-math-link" href="https://www.seobility.net/en/wiki/Creative_Commons_License_BY-SA_4.0" target="_blank" rel="noopener">CC BY-SA 4.0</a></figcaption></figure>



<p>In Android A/B Testing could be as simple as toggling features by asking for remote configurations (per user maybe). The backend code may support this or we may use Android utilities like &#8220;Firebase Remote Config&#8221; and <a href="https://developer.android.com/distribute/best-practices/develop/in-app-a-b-testing" class="rank-math-link" target="_blank" rel="noopener">Google Analytics for Firebase</a>. The new <a href="https://firebase.google.com/docs/ab-testing" class="rank-math-link" target="_blank" rel="noopener">Firebase A/B Testing</a> service has it all integrated, so it is also a well suited alternative if our target phones will have all Google Apps.</p>



<p>There are also approaches to take in case of having a Clean Architecture, where we could switch Views the behaviour based on what we configure in <a href="https://firebase.google.com/docs/remote-config/" class="rank-math-link" target="_blank" rel="noopener">Firebase Remote Configuration</a>, which is retrieved from the <code>FirebaseRemoteConfig</code> class. There is a good tutorial about <a aria-label="AB Testing in a Clean Architecture project (opens in a new tab)" href="https://medium.com/@burkedamian/a-b-testing-on-android-with-a-clean-architecture-c66c6bfd2131" target="_blank" rel="noreferrer noopener" class="rank-math-link">AB Testing in a Clean Architecture project</a>.</p>



<h2>Analytics</h2>



<p>We&#8217;ve talked about A/B Testing as one of the tools to improve and make our app successful. In other cases, to have new ideas, it is precise to know where will those have the most impact. For example, knowing what are the screens or features users use more frequently. Or where users have navigation issues or slow downs.</p>



<p>Integrating an analytics system in the app is of utter importance to have visibility about our app performance (business-wise).</p>



<figure class="wp-block-image size-large"><img width="1024" height="576" src="https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-1024x576.png" alt="" class="wp-image-5674" srcset="https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-1024x576.png 1024w, https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-300x169.png 300w, https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Google Analytics for <a href="https://www.youtube.com/watch?v=8iZpH7O6zXo" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Firebase</a> (promo)</figcaption></figure>



<p>In general, the process involved in most systems is as follows:</p>



<ul><li>Setup the library for the specific analytics service</li><li>Log events (or screens and information) in particular parts of the app that you need to measure</li><li>Debug events and see reports. Most platforms give flexibility for reporting, even with SQL-like filters.</li><li>Iterate with new events and continue measuring</li></ul>



<p>What services options are there? <a href="https://firebase.google.com/products/analytics" target="_blank" aria-label="Google Analytics for Firebase (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Google Analytics for Firebase</a> might be the go-to option for Android, but as Google Analytics was first made for Web, it may be missing some points. It is also said that it&#8217;s a bit slow to update. Something interesting is that it can log events but also track screens, with integration with what are screens in Android, Activities. For the moment, Google Analytics for Firebase is free without quotas nor paid tiers. Time will tell in the future.</p>



<p>There are also two options that try to innovate in the analytics scene, <a aria-label="Amplitude (opens in a new tab)" href="https://amplitude.com/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Amplitude</a> and <a aria-label="Mixpanel (opens in a new tab)" href="https://mixpanel.com/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Mixpanel</a>. Among so many features, both provide incredible visualizations and charts, and advanced querying capabilities.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://amplitude.com/wp-content/uploads/2021/02/mersure-img2.png" alt=""/><figcaption><a href="https://amplitude.com/" target="_blank" aria-label="Amplitude (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Amplitude</a> (promotional) Dashboard</figcaption></figure></div>



<p>I want to note something that is not an analytics service per se, but something to govern them all. You will find that if you need to use multiple services, you will have to have your own layer that logs events in those different services. Or at least, to be a bit agnostic of the service, you would prefer to have that layer. Additionally, it will happen that the Product team will have their requirements for analytics and from that point until having those reports in production (with your LogEvent calls in the middle) some mistakes will occur.</p>



<p>So there is where a tool like <a aria-label="Avo (opens in a new tab)" href="https://www.avo.app/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Avo</a> comes forward. Avo allows Product Managers, Developers and Data Scientists to work together on the same analytics plan. Said simply, while a Product Manager may define what information they require for different events, Avo has the capability to manage &#8216;branches&#8217; and generate code. Imagine a PM creating a &#8220;CONFIRM_PURCHASE&#8221; event with some info required like &#8220;DATE&#8221;, &#8220;PRODUCTS&#8221;. Well, Avo will generate the method to call: <code>Avo.confirmPurchase(date, products)</code>, amazing uh?</p>



<figure class="wp-block-image size-large"><img src="https://assets.website-files.com/5ec440af4659932990a1020c/5ee0ca30419db01182c33bed_integrations-diagram.png" alt=""/><figcaption><a href="https://www.avo.app/how-it-works" target="_blank" aria-label="Avo integration  (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Avo integration </a>at a glance</figcaption></figure>



<p>Avo might look like something advanced, but it has proven to make the analytics code development easier in large multidisciplinary teams.</p>



<h2>There is more…</h2>



<p>This second part focused more on the business side of the project. Far from being over, the next part will go back to the code side of things when making Professional Android Apps!</p>



<p><em>Cover photo: Photo by&nbsp;<a href="https://unsplash.com/@alvarordesign?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Alvaro Reyes</a>&nbsp;on&nbsp;<a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Unsplash</a></em></p>



<p><em>Wireframing by hand: Photo by <a href="https://unsplash.com/@kellysikkema?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Kelly Sikkema</a> on <a href="https://unsplash.com/s/photos/wireframe-sketch?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Unsplash</a></em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/android-projects-like-a-pro-part-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Projects Like a Pro (Expert) &#8211; Part 1</title>
		<link>https://hand-picked.io/android-projects-like-a-pro-part-1/</link>
					<comments>https://hand-picked.io/android-projects-like-a-pro-part-1/#respond</comments>
		
		<dc:creator><![CDATA[Cristian Duarte]]></dc:creator>
		<pubDate>Tue, 02 Feb 2021 21:19:41 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5573</guid>

					<description><![CDATA[Having a working Android App is not enough. More users, revenue and traffic need an engineering approach. Have you recently managed to earn an Android Developer Certification? Or maybe just finished your first personal project? Being in charge of an Android app that has gained quite a market share? Or the team has just grown [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Having a working Android App is not enough. More users, revenue and traffic need an engineering approach.</p>



<p>Have you recently managed to earn an Android Developer Certification? Or maybe just finished your first personal project? Being in charge of an Android app that has gained quite a market share? Or the team has just grown due to upcoming new features to make?</p>



<p>The next decisions and steps to take will have to tackle scalability and make you and your team Android Pros.</p>



<p>This guide is a summary of some tools and aspects the project will have to cover besides Fragments and Views.</p>



<h2>Architecture</h2>



<p>When an app becomes increasingly complex, with more features and aspects, making changes starts being problematic. Code duplication, newly introduced bugs, difficulty to change parts become common occurrences that hinder progress.</p>



<p>One of the steps for preparing for it, is establishing a good architecture, that takes into account modularity prospects of how much of a scope the project will have.</p>



<p>Is it a card game? Will you have to add different games afterwards? Is it a delivery app? What about adding pharmacies to it? How will you attach prescriptions? Is it a chat app? What about adding payments to it?</p>



<p>We may not predict the future but with some idea of the scope we will be able to think about how to modularize the project.</p>



<figure class="wp-block-image size-large"><img width="1024" height="768" src="https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-1024x768.jpg" alt="" class="wp-image-5579" srcset="https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-1024x768.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-300x225.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Also, architecture can take care of possible bugs and stability (for example, if we go the Google route, using their components that take care of configuration changes, stability issues, concurrency, etc), and make testing easier.</p>



<p>You can take a look at Google&#8217;s <a href="https://developer.android.com/jetpack/guide" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">recommendation for apps architecture</a>.</p>



<p>Not taking Google&#8217;s as a last word, you can also check out <a href="https://www.techyourchance.com/netflix-shows-the-future-of-android-architecture/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">concepts and approach about MVP (Model-View-Presenter) by Netflix</a>.</p>



<h3>Modules</h3>



<p>While &#8220;module&#8221; sounds like an abstract concept for separation of concerns or sub-units of code, in Android projects it can be the concrete concept of Modules. Those parts in which an Android Project can be composed of.</p>



<p>We may have one only module for the entire app (not bad if we are just starting and trying out an idea) but it will become more evident the need to divide the code.</p>



<p>Separation of concerns, from a functional or non-functional point of view can both work: We can separate layers (UI, Data, Network, etc), features (Auth, BigFeature1, BigFeature2, Commons, etc) or a mix.</p>



<p>In case of having multiple teams for different parts of the app (imagine a supermarket app where electronics appliances screens are totally different from the groceries ones), different modules may provide a natural separation among teams as well. This is useful as well in <a href="https://hand-picked.io/evaluating-remote-software-development-nearshore-outsourcing-is-the-answer-post/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">remote and distributed teams</a>.</p>



<p>Here a bit more conceptual in-depth presentation about modules.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Build a modular Android app architecture (Google I/O&#039;19)" width="780" height="439" src="https://www.youtube.com/embed/PZBg5DIzNww?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<h3>Demo Apps</h3>



<p>The bigger the app, the more it will take to build, it is kind of a fact.</p>



<p>What if we want to (manually) test a part of the app we are working on? What if building takes 15 minutes? This WILL happen, sadly. In this case, modularizing among features may help as you may add mini-apps, maybe called &#8220;demos&#8221; or feature &#8220;Activities&#8221;, which will make it possible to have fast cycles for your features development.</p>



<figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Android at Scale @Square" src="https://player.vimeo.com/video/380843878?dnt=1&amp;app_id=122963" width="780" height="439" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p><a href="https://www.droidcon.com/media-detail?video=380843878" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">In an Square talk they tell about one approach to have fast builds and development with this kind of architecture (video above)</a>.</p>



<h3>Dependencies</h3>



<p>It will become prevalent that different modules, will end up connecting, or said better, depending upon themselves.</p>



<p>Just imagine your &#8220;Auth&#8221; module being asked for sessions from multiple parts of the app. Dependency Injection will come to the rescue for this and for easier Testing as well.</p>



<p>You won&#8217;t see any big Android project without a kind of Dependency Injection applied to it. Currently on Android, Hint is taking the position from Dagger as the recommended standard to follow (pushed by Google).</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Hilt - Android Dependency Injection" width="780" height="439" src="https://www.youtube.com/embed/B56oV3IHMxg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<h2>Testing</h2>



<p>Putting the religion aspect aside, more automated Testing will help the project. At least, avoiding to have the same bug twice.</p>



<p>The battery of tests will go from testing code/behavior one class at a time up to end to end tests that follow user paths in the app (for example, from login until saving changes in the app).</p>



<p>There is a Testing Pyramid that graphically explains three testing categories.</p>



<figure class="wp-block-image size-large"><img src="https://developer.android.com/images/training/testing/pyramid.png" alt="Android Testing Pyramid"/></figure>



<p>Some things we&#8217;ll have to consider:</p>



<ul><li>The need of implementing Dependency Injection in the project is inevitable. (At least, it will help with mocking features that are not meant to be tested in certain Unit Tests. It will also have a performance impact on Testing as well. Let&#8217;s avoid accessing the database or network when running a logic test.)</li><li>Small tests should be fast and generally only test Kotlin/Java code. Large tests, may need to run on real devices or emulation. That&#8217;s why some companies have phone farms or use services like AWS Device Farm or Firebase Test Lab.</li></ul>



<p><a href="https://developer.android.com/training/testing/fundamentals" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">The Fundamentals of Testing (for Android) can be seen here in the Android Developer site</a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Test-driven development on Android with the Android Testing Support Library (Google I/O &#039;17)" width="780" height="439" src="https://www.youtube.com/embed/pK7W5npkhho?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Another aspect of testing that appears is how much of our app we are testing. This can be reflected by Code Coverage. Nowadays Android Studio has a built-in feature that allows you to run code with code coverage. Use it at your own &#8216;risk&#8217;, do not try to reach 100% without a second thought. Some parts in the code will be much more critical than others, focus on them first.<br><a href="https://developer.android.com/studio/test#view_test_coverage" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Android Studio: how to run tests with code coverage</a>.</p>



<h2>Continuous Integration</h2>



<p>How we can reduce the chances of delivering new bugs into production after making a new bunch of code (new features, fixes, etc)? What about having builds ready for QA? Or.. how will all those tests run when integrating code in our Master branch?</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-1024x683.jpg" alt="" class="wp-image-5582" srcset="https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-300x200.jpg 300w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Here is when Continuous Integration takes their role in the project. Basically (but not restricted to) at least all new commits in our main branch (Master? but it could also be made for every feature branch) will trigger a new build. That build will itself be tested, both automatically and manually by our QA team (if we have any, please have one). It may also deliver those builds, making them accessible to anyone interested (QA, ourselves, Product management, etc).</p>



<p>Nowadays Jenkins CI is one of the most used, but some other tools can be used as well, Bitrise, Github Actions or even Gitlab CI.</p>



<p>In general it will be duty of one of the developers (or maybe a delivery manager?) to configure the platform and project with the steps to execute when integrating. Obviously we will want to run tests and make the build. Additionally many actions in this article series will end up running from CI as we want every &#8220;health&#8221; check for our project to be run automatically.</p>



<p>Check out this <a href="https://www.raywenderlich.com/10562143-continuous-integration-for-android" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">practical introduction to Android Continuous Integration</a>.</p>



<h2>There is more..</h2>



<p>That&#8217;s all for this first part of the series. I promise, there is a lot more to cover when making Scalable Professional Android apps!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/android-projects-like-a-pro-part-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
