<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pranav Pandey</title>
    <description>The latest articles on DEV Community by Pranav Pandey (@pranavpandey).</description>
    <link>https://dev.to/pranavpandey</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F143947%2F4a43cce2-df3a-4af1-9da2-1a6c293d3241.jpg</url>
      <title>DEV Community: Pranav Pandey</title>
      <link>https://dev.to/pranavpandey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pranavpandey"/>
    <language>en</language>
    <item>
      <title>Host Static Websites for Free</title>
      <dc:creator>Pranav Pandey</dc:creator>
      <pubDate>Thu, 04 Apr 2019 17:57:39 +0000</pubDate>
      <link>https://dev.to/pranavpandey/host-static-websites-for-free-1in3</link>
      <guid>https://dev.to/pranavpandey/host-static-websites-for-free-1in3</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F85rl3w77hejgk7t2qxrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F85rl3w77hejgk7t2qxrz.png" alt="Header"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having our own website can be beneficial to get a better opportunity or to make us standout and shout in this over crowded market, but there are very few people who want to spend money to make one and keep it running. If I say &lt;strong&gt;there is no need to pay extra money&lt;/strong&gt; to make your personal website or portfolio with full control then, what would you say? Please read below to know more and how you can make it happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;GitHub account&lt;/code&gt; to host your website. You can register for a GitHub account &lt;a href="https://github.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Git&lt;/code&gt; to push your website on GitHub. You can install git from &lt;a href="https://git-scm.com/download" rel="noopener noreferrer"&gt;here&lt;/a&gt; depending on your platform (Linux, Mac or Windows).&lt;/li&gt;
&lt;li&gt;A good &lt;code&gt;code editor&lt;/code&gt; to build or edit the website. You can download &lt;a href="https://code.visualstudio.com" rel="noopener noreferrer"&gt;VS Code&lt;/a&gt;, &lt;a href="https://atom.io" rel="noopener noreferrer"&gt;Atom&lt;/a&gt; or &lt;a href="https://notepad-plus-plus.org" rel="noopener noreferrer"&gt;Notepad++&lt;/a&gt; depending on your platform.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;static website&lt;/code&gt; which we are going to host. This is optional and you can develop or update the website later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Custom domain
&lt;/h3&gt;

&lt;p&gt;A &lt;code&gt;domain&lt;/code&gt; which you want to connect with the website. This step is optional and only required if you want to use your own personalised domain. You can buy a domain name on &lt;a href="https://godaddy.com" rel="noopener noreferrer"&gt;GoDaddy&lt;/a&gt;, &lt;a href="https://www.namecheap.com" rel="noopener noreferrer"&gt;Namecheap&lt;/a&gt;, or &lt;a href="https://www.google.com/#q=buy+domain+name" rel="noopener noreferrer"&gt;anything else&lt;/a&gt;. Please don't buy their hosting service as we are going to host the website for free on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;Above, I have discussed about &lt;code&gt;git&lt;/code&gt; which is a version control system used to maintain code or source code. Here, we are going to use some of its commands but it is a very useful and powerful tool making the developers life easier in every software industry. If you want to learn more about git, you can take a very well written and free course at &lt;a href="https://in.udacity.com/course/how-to-use-git-and-github--ud775" rel="noopener noreferrer"&gt;Udacity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here, I have written &lt;code&gt;static website&lt;/code&gt;, what does it really mean? Static websites are simple &lt;code&gt;HTML&lt;/code&gt; pages which cannot perform server side operations. So, you cannot host your &lt;code&gt;PHP blog, Node.js or web app&lt;/code&gt; with this method, you can use &lt;a href="https://jekyllrb.com" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt; for blogging or convert your WordPress blog into a static website by using this &lt;a href="https://wordpress.org/plugins/simply-static" rel="noopener noreferrer"&gt;generator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So, there are some limitations but I think we can live with that as still we can do enough amount of work with static websites. Still not sure? Please check out &lt;a href="https://pranavpandey.com" rel="noopener noreferrer"&gt;my personal website&lt;/a&gt; which is completely a static website built with &lt;a href="https://pranavpandey.com" rel="noopener noreferrer"&gt;Polymer&lt;/a&gt; and can be hosted by using this technique.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare the website
&lt;/h2&gt;

&lt;p&gt;First of all, we need to &lt;code&gt;initialize the website&lt;/code&gt; structure which we can put on our GitHub account. For this, you can use any static website with an &lt;code&gt;index.html&lt;/code&gt; page in its root directory.&lt;/p&gt;

&lt;p&gt;If you have not created the website yet then, just follow the steps below to create a website for testing, you can update it with the actual website later.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new folder or directory, say &lt;code&gt;website&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create an &lt;code&gt;index.html&lt;/code&gt; file inside this folder.&lt;/li&gt;
&lt;li&gt;Place the below code in it and save.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;My website&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;My website, Coming Soon!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a repository
&lt;/h2&gt;

&lt;p&gt;We have successfully created our website, now we need to &lt;code&gt;place or push&lt;/code&gt; this collection of codes called as &lt;code&gt;source code&lt;/code&gt; on GitHub. For this, we first need to &lt;code&gt;create a repository or repo&lt;/code&gt; with our registered account.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login with your &lt;a href="https://github.com/login" rel="noopener noreferrer"&gt;GitHub account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a &lt;a href="https://github.com/new" rel="noopener noreferrer"&gt;new repository&lt;/a&gt; with the name &lt;code&gt;username.github.io&lt;/code&gt;. Here, &lt;code&gt;username&lt;/code&gt; is your GitHub account user name.&lt;/li&gt;
&lt;li&gt;Now, we have successfully created a repo, it is just a place on a server which will store our website to serve it globally.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Push the website
&lt;/h2&gt;

&lt;p&gt;Now, we are going to push our website on GitHub. For this, we first need to &lt;code&gt;commit the code&lt;/code&gt; locally. Please follow the steps below to make your first commit.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a terminal or command prompt in the website folder.&lt;/li&gt;
&lt;li&gt;Add all the files in the staging area by running the below command.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git add &lt;span class="nt"&gt;-A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Now, type a commit message and commit.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you are running git for the first time then, you need to &lt;code&gt;setup your git username and email&lt;/code&gt; to do your first commit. It can be done by using the below commands.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    // Configure name
    git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.name &lt;span class="s2"&gt;"Your Name"&lt;/span&gt;

    // Configure email
    git config &lt;span class="nt"&gt;--global&lt;/span&gt; user.email &lt;span class="s2"&gt;"email@example.com"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have successfully committed our website code. Now, we will add origin so that we can push this code to our GitHub repo. To add origin, go to your GitHub repo page and click on &lt;code&gt;Clone or download&lt;/code&gt; button. It will show a url something like &lt;code&gt;https://github.com/username/username.github.io.git&lt;/code&gt;. Copy this url and run the below command in your website directory to add the origin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    // Add origin
    git remote add origin https://github.com/username/username.github.io.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we have added origin and ready to push the code on server. Run the below command to &lt;code&gt;push the code&lt;/code&gt; in the master branch of the origin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will push our local code to the GitHub repo which you can check by visiting the repo page in the browser. It will show all your committed files.&lt;/p&gt;

&lt;h2&gt;
  
  
  See it running
&lt;/h2&gt;

&lt;p&gt;Now, we are done and you can check your website running at the following link:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;https://username.github.io&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Did you like it? It is the easiest and fastest method to make a website live for free! Now, a question arises, what if I want to use my own domain called as &lt;code&gt;custom domain&lt;/code&gt;? The answer is pretty simple, it is also possible with GitHub and you don't need to pay any extra money. Sounds great? Let's try to integrate your custom domain to give it a more personalised feel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect with a custom domain
&lt;/h2&gt;

&lt;p&gt;To connect our website with a custom domain we need to do modify our &lt;code&gt;website files and DNS configurations&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, go to your website folder and create a new file &lt;code&gt;CNAME&lt;/code&gt;. Please make sure that don't give it any extension.&lt;/li&gt;
&lt;li&gt;Now, edit this file and paste your domain in it and save.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;yourdomain.xyz&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Again, commit the code and push it to the GitHub.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    git add &lt;span class="nt"&gt;-A&lt;/span&gt;
    git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Add CNAME"&lt;/span&gt;
    git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, we have modified our website so that it can point to our custom domain. Similarly, we need to modify the DNS configuration so that it can point to the GitHub server. For this we need to &lt;code&gt;add A records and CNAME&lt;/code&gt; in the DNS configuration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login with your domain registrar account (GoDaddy, NameCheap, etc.).&lt;/li&gt;
&lt;li&gt;Select your domain and go to the DNS management or configuration.&lt;/li&gt;
&lt;li&gt;Delete any previous A records and add these two A records. You can read more on this &lt;a href="https://help.github.com/en/articles/setting-up-an-apex-domain" rel="noopener noreferrer"&gt;here&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // 1st A record
    type: A 
    name: @ 
    IPv4: 185.199.108.153
    Automatic TTL

    // 2nd A record
    type: A 
    name: @ 
    IPv4: 185.199.109.153
    Automatic TTL

    // 3rd A record
    type: A 
    name: @ 
    IPv4: 185.199.110.153
    Automatic TTL

    // 4th A record
    type: A 
    name: @ 
    IPv4: 185.199.111.153
    Automatic TTL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save and done.&lt;/li&gt;
&lt;li&gt;Here, we are just pointing our domain to the GitHub servers by using their IP addresses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, check the website at your custom domain. It should work or wait for 2–3 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Great! We have successfully hosted our website on GitHub without any extra cost. Please keep in mind that this is not the only way, there are several other possibilities like &lt;a href="https://firebase.google.com/docs/hosting" rel="noopener noreferrer"&gt;Firebase Hosting&lt;/a&gt; which I will discuss later. We can also partially secure our website by using &lt;a href="https://www.cloudflare.com" rel="noopener noreferrer"&gt;Cloudflare&lt;/a&gt; free SSL. Please ask questions or share your feedback in the comments section to make it better.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is not the end, keep exploring to find out the better possibilities and stay tuned to know more about such tactics of web!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>beginners</category>
      <category>hosting</category>
      <category>git</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Android — Create Bitmap from a View</title>
      <dc:creator>Pranav Pandey</dc:creator>
      <pubDate>Mon, 18 Mar 2019 13:41:41 +0000</pubDate>
      <link>https://dev.to/pranavpandey/android-create-bitmap-from-a-view-3lck</link>
      <guid>https://dev.to/pranavpandey/android-create-bitmap-from-a-view-3lck</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16u2k14sau3bf8ccwl7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F16u2k14sau3bf8ccwl7k.png" alt="Header"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello everyone! This is my first programming tutorial here in which I will discuss about creating the bitmap from a view at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I have an &lt;a href="https://play.google.com/store/apps/details?id=com.pranavpandey.rotation" rel="noopener noreferrer"&gt;app&lt;/a&gt; for Android in which users can customise all the theme colors according to their requirement. They can also copy or share their theme in the form of a JSON which can be imported to achieve the exactly same look later or can be shared between the other devices. &lt;/p&gt;

&lt;p&gt;Recently, I decided to generate an image from the theme preview which users can share along with the JSON to give some idea about the theme before importing it. The in-app preview already shows the theme before applying it but I wanted to provide the similar kind of functionality for posts shared on social media and in other communities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;del&gt;View.getDrawingCache()&lt;/del&gt;
&lt;/h3&gt;

&lt;p&gt;Initially, I tried to use the view drawing cache. Although, it is working fine but most of the drawing cache related methods are &lt;a href="https://developer.android.com/reference/android/view/View.html#getDrawingCache()" rel="noopener noreferrer"&gt;deprecated&lt;/a&gt; in Android 9 (API 28). Please check the deprecated code below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="cm"&gt;/**
     * Creates a bitmap from the supplied view.
     *
     * @param view The view to get the bitmap.
     * @param width The width for the bitmap.
     * @param height The height for the bitmap.
     *
     * @return The bitmap from the supplied drawable.
     */&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nd"&gt;@NonNull&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Bitmap&lt;/span&gt; &lt;span class="nf"&gt;createBitmapFromView&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@NonNull&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;measure&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeMeasureSpec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DynamicUnitUtils&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;convertDpToPixels&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXACTLY&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
                    &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeMeasureSpec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DynamicUnitUtils&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;convertDpToPixels&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXACTLY&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredWidth&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredHeight&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDrawingCacheEnabled&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buildDrawingCache&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Bitmap&lt;/span&gt; &lt;span class="n"&gt;bitmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Bitmap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createBitmap&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDrawingCache&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDrawingCacheEnabled&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bitmap&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Canvas
&lt;/h3&gt;

&lt;p&gt;As drawing cache API is deprecated, I found that we can achieve the similar result by using the &lt;a href="https://developer.android.com/reference/android/graphics/Canvas" rel="noopener noreferrer"&gt;Canvas&lt;/a&gt; API. Please check the new code below:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="cm"&gt;/**
     * Creates a bitmap from the supplied view.
     *
     * @param view The view to get the bitmap.
     * @param width The width for the bitmap.
     * @param height The height for the bitmap.
     *
     * @return The bitmap from the supplied drawable.
     */&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nd"&gt;@NonNull&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Bitmap&lt;/span&gt; &lt;span class="nf"&gt;createBitmapFromView&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@NonNull&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;measure&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeMeasureSpec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DynamicUnitUtils&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;convertDpToPixels&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXACTLY&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
                    &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;makeMeasureSpec&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DynamicUnitUtils&lt;/span&gt;
                            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;convertDpToPixels&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="nc"&gt;View&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MeasureSpec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXACTLY&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;layout&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredWidth&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredHeight&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

        &lt;span class="nc"&gt;Bitmap&lt;/span&gt; &lt;span class="n"&gt;bitmap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Bitmap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createBitmap&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredWidth&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt;
                &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMeasuredHeight&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt; &lt;span class="nc"&gt;Bitmap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ARGB_8888&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Canvas&lt;/span&gt; &lt;span class="n"&gt;canvas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Canvas&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bitmap&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;Drawable&lt;/span&gt; &lt;span class="n"&gt;background&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBackground&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;draw&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;canvas&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;view&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;draw&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;canvas&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;bitmap&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;Pass &lt;code&gt;0&lt;/code&gt; for &lt;strong&gt;height&lt;/strong&gt; or &lt;strong&gt;width&lt;/strong&gt; to use the current view dimensions.&lt;br&gt;
You can check the code for &lt;code&gt;DynamicUnitUtils.convertDpToPixels(float)&lt;/code&gt; method &lt;a href="https://github.com/pranavpandey/dynamic-utils/blob/df2fa843cd1ed0b9fd7c80e236bc99a40d546bba/dynamic-utils/src/main/java/com/pranavpandey/android/dynamic/utils/DynamicUnitUtils.java#L34" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Outputs from both the methods are similar but it is recommended to use the canvas API as the view drawing cache methods may not work in the future releases of Android.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywzof457f9jwr4q2jkwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywzof457f9jwr4q2jkwe.png" alt="Output"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  PixelCopy
&lt;/h3&gt;

&lt;p&gt;There is another API for Android 7.0 (API 24+) or above devices which you can use to take screenshots of the UI. It seems complicated to me and I have not tried it yet. You can check the official documentation &lt;a href="https://developer.android.com/reference/android/view/PixelCopy.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Dynamic Utils
&lt;/h2&gt;

&lt;p&gt;I have created a library for similar kind of utility methods related to color, device, drawable, package, tasks, SDK, etc. which you can use to perform various runtime (dynamic) operations. Please visit the GitHub page for more info.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pranavpandey" rel="noopener noreferrer"&gt;
        pranavpandey
      &lt;/a&gt; / &lt;a href="https://github.com/pranavpandey/dynamic-utils" rel="noopener noreferrer"&gt;
        dynamic-utils
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Utility functions to perform dynamic operations on Android. 
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/pranavpandey/dynamic-utils./graphics/icon.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fpranavpandey%2Fdynamic-utils.%2Fgraphics%2Ficon.png" width="160" height="160"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Dynamic Utils&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.apache.org/licenses/LICENSE-2.0.html" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3b31e8c14fcfdb82650a39ea0cb91538405a1bf28f0e837e97d877983d636394/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d417061636865253230322d3445423142412e7376673f" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://search.maven.org/artifact/com.pranavpandey.android/dynamic-utils" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/a3404e8488267eab3e5780cf55d7c1185ee4d7d0b573133605190d7a3b19268c/68747470733a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f636f6d2e7072616e617670616e6465792e616e64726f69642f64796e616d69632d7574696c73" alt="Release"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A collection of static methods and packages to perform dynamic operations on Android 2.3 (API 9)
and above.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Since v0.4.0, it uses &lt;a href="https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0" rel="nofollow noopener noreferrer"&gt;26.x.x support libraries&lt;/a&gt; so, minimum SDK will be
Android 4.0 (API 14)
&lt;br&gt;Since v2.0.0, it uses &lt;a href="https://developer.android.com/jetpack/androidx" rel="nofollow noopener noreferrer"&gt;AndroidX&lt;/a&gt; so, first &lt;a href="https://developer.android.com/jetpack/androidx/migrate" rel="nofollow noopener noreferrer"&gt;migrate&lt;/a&gt; your
project to AndroidX
&lt;br&gt;Since v3.3.0, added &lt;a href="https://github.com/pranavpandey/dynamic-utils/tree/master/dynamic-utils/src/main/java/com/pranavpandey/android/dynamic/util/concurrent" rel="noopener noreferrer"&gt;Concurrent&lt;/a&gt; package to replace the deprecated
&lt;a href="https://developer.android.com/reference/android/os/AsyncTask" rel="nofollow noopener noreferrer"&gt;AsyncTask&lt;/a&gt; API.
&lt;br&gt;Since v4.1.0, it is dependent on Java 8 due to the dependency on
&lt;a href="https://developer.android.com/jetpack/androidx/releases/core" rel="nofollow noopener noreferrer"&gt;AndroidX Core&lt;/a&gt;.
&lt;br&gt;Since v4.3.0, it supports some helper methods to capture results via
&lt;a href="https://github.com/pranavpandey/dynamic-utils#barquode-for-android" rel="noopener noreferrer"&gt;Barquode&lt;/a&gt; app.
&lt;br&gt;Since v4.5.1, it is targeting Java 17 to provide maximum compatibility.
&lt;br&gt;Since v4.6.0, the minimum SDK is Android 4.4 (API 19) to comply with the latest policies.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contents&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/pranavpandey/dynamic-utils#usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#concurrent" rel="noopener noreferrer"&gt;Concurrent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicanimutils" rel="noopener noreferrer"&gt;DynamicAnimUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicbitmaputils" rel="noopener noreferrer"&gt;DynamicBitmapUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamiccolorutils" rel="noopener noreferrer"&gt;DynamicColorUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicdeviceutils" rel="noopener noreferrer"&gt;DynamicDeviceUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicdrawableutils" rel="noopener noreferrer"&gt;DynamicDrawableUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamiclinkutils" rel="noopener noreferrer"&gt;DynamicLinkUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicpackageutils" rel="noopener noreferrer"&gt;DynamicPackageUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamictaskutils" rel="noopener noreferrer"&gt;DynamicTaskUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicwindowutils" rel="noopener noreferrer"&gt;DynamicUnitUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicsdkutils" rel="noopener noreferrer"&gt;DynamicSdkUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicviewutils" rel="noopener noreferrer"&gt;DynamicViewUtils&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#dynamicwindowutils" rel="noopener noreferrer"&gt;DynamicWindowUtils&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/pranavpandey/dynamic-utils#barquode" rel="noopener noreferrer"&gt;Barquode&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#capture" rel="noopener noreferrer"&gt;Capture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#result" rel="noopener noreferrer"&gt;Result&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#translations" rel="noopener noreferrer"&gt;Translations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#author" rel="noopener noreferrer"&gt;Author&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pranavpandey/dynamic-utils#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;It can be installed by adding the following dependency to your &lt;code&gt;build.gradle&lt;/code&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pranavpandey/dynamic-utils" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;This is my initial attempt on blogging so, I will keep improving the future posts. Please comment to give suggestions and what you want to see in the future posts. Thanks for your time!&lt;/p&gt;

</description>
      <category>android</category>
      <category>utility</category>
      <category>bitmap</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Android Story — Introduction </title>
      <dc:creator>Pranav Pandey</dc:creator>
      <pubDate>Sun, 10 Mar 2019 10:03:17 +0000</pubDate>
      <link>https://dev.to/pranavpandey/android-story-introduction--5fl2</link>
      <guid>https://dev.to/pranavpandey/android-story-introduction--5fl2</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob7hk2wgyv8whz2r5pt3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob7hk2wgyv8whz2r5pt3.jpg" alt="Header"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hello everyone! My name is &lt;a href="https://pranavpandey.com" rel="noopener noreferrer"&gt;Pranav Pandey&lt;/a&gt; and I want to tell a story of Android development. I am a professional software developer and a little bit designer from India working on many technologies, especially from Google.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I am a self taught developer and working on Android since 2011 and now trying to setup my own app development business. In those years, I have faced many challenges related to self learning and software development. Some of them I have already overcame and still finding solution for the rest. My story is quite interesting as I have started with &lt;a href="https://forum.xda-developers.com/search.php?searchid=453920248" rel="noopener noreferrer"&gt;reverse engineering&lt;/a&gt; the various Android apps and developing custom ROMs at &lt;a href="https://forum.xda-developers.com/member.php?u=3962236" rel="noopener noreferrer"&gt;XDA&lt;/a&gt; followed by the native &lt;a href="https://play.google.com/store/apps/dev?id=6608630615059087491" rel="noopener noreferrer"&gt;app development&lt;/a&gt; in 2013.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nothing is perfect but can be better. Developing such better things!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then, I worked with a couple of start-ups for around two years and learnt a lot during that period. I have also travelled to &lt;a href="https://www.instagram.com/pranavpandeydev" rel="noopener noreferrer"&gt;other countries&lt;/a&gt; and lead the software development of three Android devices. Thanks to all of my managers, team members and other co-workers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future
&lt;/h2&gt;

&lt;p&gt;Now, with the help of this series I want to share my experiences with others in which I will reveal the various hidden secrets of Android and software development. I will also discuss some of the mistakes that I made in the past so that you can learn and improve on them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't be afraid of failures, it makes you more confident!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;p&gt;I always believe in open source projects and helping others as I have learnt a lot from this community so, I am working on various &lt;a href="https://github.com/pranavpandey" rel="noopener noreferrer"&gt;open source projects&lt;/a&gt; and giving back to the community.&lt;/p&gt;

&lt;p&gt;This is my initial attempt on blogging so, please don't judge me as I will keep improving the future posts. Please comment to give suggestions and what you want to see in the future posts. Thanks for your time!&lt;/p&gt;

</description>
      <category>android</category>
      <category>softwaredevelopment</category>
      <category>opensource</category>
      <category>storytelling</category>
    </item>
  </channel>
</rss>
