<?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>Forem: Julio Merlo</title>
    <description>The latest articles on Forem by Julio Merlo (@acronimax).</description>
    <link>https://forem.com/acronimax</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%2F913048%2F76a5f101-41b0-4472-9be6-c55beb0e1a7d.jpeg</url>
      <title>Forem: Julio Merlo</title>
      <link>https://forem.com/acronimax</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/acronimax"/>
    <language>en</language>
    <item>
      <title>Simple Elegant Image Loader</title>
      <dc:creator>Julio Merlo</dc:creator>
      <pubDate>Sun, 25 Aug 2024 22:58:54 +0000</pubDate>
      <link>https://forem.com/acronimax/simple-elegant-image-loader-4dl0</link>
      <guid>https://forem.com/acronimax/simple-elegant-image-loader-4dl0</guid>
      <description>&lt;p&gt;I'm so happy to share some knowledge transformed in this package, that will enhance the user experience with a smooth transition and very customizable.&lt;br&gt;
I hope this tiny package extends and contributes to the huge &lt;strong&gt;React Native Community&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-native-animated-image-loader" rel="noopener noreferrer"&gt;React Native Animated Image Loader&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers and stay tuned to more coming.&lt;/p&gt;

&lt;p&gt;Happy coding 🚀&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>animation</category>
      <category>npm</category>
      <category>coding</category>
    </item>
    <item>
      <title>Android Security Tips</title>
      <dc:creator>Julio Merlo</dc:creator>
      <pubDate>Fri, 08 Mar 2024 17:18:20 +0000</pubDate>
      <link>https://forem.com/acronimax/android-security-tips-6dn</link>
      <guid>https://forem.com/acronimax/android-security-tips-6dn</guid>
      <description>&lt;p&gt;Android has the largest global community and gives users more flexibility to install not certificate applications from the official store.&lt;/p&gt;

&lt;p&gt;That means you have more vulnerability in your security, to improve your application security. I recommend adding some layers to enhance the safety of the application you will make.&lt;/p&gt;

&lt;h1&gt;
  
  
  Content
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Prevent Screenshot | ScreenRecord&lt;/li&gt;
&lt;li&gt;Inappropriate Usage Of The Platform&lt;/li&gt;
&lt;li&gt;Exception Domains&lt;/li&gt;
&lt;li&gt;Reverse Engineer&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prevent Screenshot | ScreenRecord &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;For screenshots or screen record disable, you need to import the &lt;strong&gt;WindowManager&lt;/strong&gt; and add this line to the &lt;strong&gt;MainActivity&lt;/strong&gt; file.&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="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;android.view.WindowManager&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="n"&gt;getWindow&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;setFlags&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;WindowManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;LayoutParams&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FLAG_SECURE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;WindowManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;LayoutParams&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;FLAG_SECURE&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Inappropriate Usage Of The Platform &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If your app won't be doing more processes or need much RAM, you need to &lt;strong&gt;delete&lt;/strong&gt; these properties from your &lt;strong&gt;AndroidManifest.xml&lt;/strong&gt; you should use it only when you know exactly where all your memory is being allocated and why it must be retained.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt;
&lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;android:largeHeap=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
&lt;span class="err"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can read more about this on the official &lt;a href="https://developer.android.com/topic/performance/memory" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Exception Domains &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Allowing http for some domains but not other domains you must provide &lt;strong&gt;Network Security Config File&lt;/strong&gt;. For these go to the folder where other xml file are &lt;strong&gt;../res/xml&lt;/strong&gt; and create a file &lt;strong&gt;network_security_config.xml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;network-security-config&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;domain-config&lt;/span&gt; &lt;span class="na"&gt;cleartextTrafficPermitted=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- Development Domains --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;domain&lt;/span&gt; &lt;span class="na"&gt;includeSubdomains=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;10.0.1.1&lt;span class="nt"&gt;&amp;lt;/domain&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;domain&lt;/span&gt; &lt;span class="na"&gt;includeSubdomains=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;localhost&lt;span class="nt"&gt;&amp;lt;/domain&amp;gt;&lt;/span&gt;
        ... 
    &lt;span class="nt"&gt;&amp;lt;/domain-config&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;domain-config&lt;/span&gt; &lt;span class="na"&gt;cleartextTrafficPermitted=&lt;/span&gt;&lt;span class="s"&gt;"false"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="c"&gt;&amp;lt;!-- Api Services Domains --&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;domain&lt;/span&gt; &lt;span class="na"&gt;includeSubdomains=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;testdomain.com&lt;span class="nt"&gt;&amp;lt;/domain&amp;gt;&lt;/span&gt;
        ...
    &lt;span class="nt"&gt;&amp;lt;/domain-config&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/network-security-config&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then add these property in the &lt;strong&gt;AndroidManifest.xml&lt;/strong&gt; to reference the network config just create above.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;...
&lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt;
&lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="na"&gt;android:networkSecurityConfig=&lt;/span&gt;&lt;span class="s"&gt;"@xml/network_security_config"&lt;/span&gt;
&lt;span class="err"&gt;....&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information and configuration &lt;a href="https://developer.android.com/training/articles/security-config" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Reverse Engineer &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In this case, the &lt;strong&gt;Reverse Engineer&lt;/strong&gt; is used to verify if your code is optimized and compressed, but you can use it for whatever purpose you need, check malicious code, analyze apps or just for fun. If you don't see a compressed code or minied thats mean you need to enable the property in the &lt;strong&gt;..app/build.gradle&lt;/strong&gt;. Remember that when you enable this approach, you need to add the rules that author of third packages you use, to the &lt;strong&gt;proguard-rules.pro&lt;/strong&gt; and check those rules don't break your app.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reverse an .apk steps:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Rename your &lt;strong&gt;.apk&lt;/strong&gt; file and add &lt;strong&gt;.zip&lt;/strong&gt; at the end.&lt;/li&gt;
&lt;li&gt;Extract the content. When you extract, you will have all the code, classes and many other things.&lt;/li&gt;
&lt;li&gt;Download the tool &lt;strong&gt;dex2jar&lt;/strong&gt; and place it in the same folder you extract the &lt;strong&gt;apk&lt;/strong&gt; &lt;a href="https://github.com/DexPatcher/dex2jar/releases" rel="noopener noreferrer"&gt;link&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a Terminal where your files are located and then run the following command on your terminal&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;d2j-dex2jar.bat classes.dex
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the tool &lt;strong&gt;Java Decompiler&lt;/strong&gt; &lt;a href="https://java-decompiler.github.io/" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Last but not least, open the previous download program &lt;strong&gt;Java Decompiler&lt;/strong&gt; and open the file located in the extracted &lt;strong&gt;apk&lt;/strong&gt; folder &lt;strong&gt;classes-dex2jar.jar&lt;/strong&gt;. If you see your code minified 🥳 you got it!. The obfuscation process was successful 🔥.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fw2s3ex5ar5x2rfqpcois.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fw2s3ex5ar5x2rfqpcois.png" alt="Obfuscated vs No Obfuscated" width="800" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>android</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Ionic + Capacitor Security Tips</title>
      <dc:creator>Julio Merlo</dc:creator>
      <pubDate>Sat, 02 Mar 2024 20:55:33 +0000</pubDate>
      <link>https://forem.com/acronimax/ionic-capacitor-security-tips-31jg</link>
      <guid>https://forem.com/acronimax/ionic-capacitor-security-tips-31jg</guid>
      <description>&lt;p&gt;For this tips will be use the &lt;strong&gt;Obfuscation&lt;/strong&gt; and &lt;strong&gt;Custom Rules&lt;/strong&gt; approach to enable minify and compress code.&lt;/p&gt;

&lt;h1&gt;
  
  
  Content
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Obfuscation&lt;/li&gt;
&lt;li&gt;Obfuscation Rules&lt;/li&gt;
&lt;li&gt;Rooted Device Checking&lt;/li&gt;
&lt;li&gt;Detect Jailbreak Phone&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ionic.io/blog/capacitor-ssl-pinning" rel="noopener noreferrer"&gt;SSL Pinning&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Obfuscation &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;To obfuscate, you need to find the &lt;strong&gt;build.gradle&lt;/strong&gt; file and enable the property minifyEnabled to true, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;release &lt;span class="o"&gt;{&lt;/span&gt;
   minifyEnabled &lt;span class="nb"&gt;true&lt;/span&gt;
   ...
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Obfuscation Rules &lt;a&gt;&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;After that, add the below lines in &lt;strong&gt;proguard-rules.pro&lt;/strong&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;##############&lt;/span&gt;
&lt;span class="c"&gt;# Ionic Config&lt;/span&gt;
&lt;span class="c"&gt;##############&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class org.apache.cordova.&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class org.apache.cordova.camera.&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class org.apache.cordova.&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; public class &lt;span class="k"&gt;*&lt;/span&gt; extends org.apache.cordova.CordovaPlugin
&lt;span class="nt"&gt;-keep&lt;/span&gt; class com.ionic.keyboard.IonicKeyboard.&lt;span class="k"&gt;**&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;##############&lt;/span&gt;
&lt;span class="c"&gt;# Ionic Config&lt;/span&gt;
&lt;span class="c"&gt;##############&lt;/span&gt;

&lt;span class="c"&gt;#########################################################&lt;/span&gt;
&lt;span class="c"&gt;# Remember to change the com.abc.xyz to your real App id!&lt;/span&gt;
&lt;span class="c"&gt;#########################################################&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class com.abc.xyz.BuildConfig &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;#########################################################&lt;/span&gt;
&lt;span class="c"&gt;# Remember to change the com.abc.xyz to your real App id!&lt;/span&gt;
&lt;span class="c"&gt;#########################################################&lt;/span&gt;

&lt;span class="c"&gt;########&lt;/span&gt;
&lt;span class="c"&gt;# AdmMob&lt;/span&gt;
&lt;span class="c"&gt;########&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; extends java.util.ListResourceBundle &lt;span class="o"&gt;{&lt;/span&gt;
    protected Object[][] getContents&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; public class com.google.android.gms.common.internal.safeparcel.SafeParcelable &lt;span class="o"&gt;{&lt;/span&gt;
    public static final &lt;span class="k"&gt;***&lt;/span&gt; NULL&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keepnames&lt;/span&gt; @com.google.android.gms.common.annotation.KeepName class &lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nt"&gt;-keepclassmembernames&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @com.google.android.gms.common.annotation.KeepName &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keepnames&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; implements android.os.Parcelable &lt;span class="o"&gt;{&lt;/span&gt;
    public static final &lt;span class="k"&gt;**&lt;/span&gt; CREATOR&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; public class com.google.cordova.admob.&lt;span class="k"&gt;**&lt;/span&gt;
&lt;span class="c"&gt;########&lt;/span&gt;
&lt;span class="c"&gt;# AdmMob&lt;/span&gt;
&lt;span class="c"&gt;########&lt;/span&gt;

&lt;span class="c"&gt;########################################################&lt;/span&gt;
&lt;span class="c"&gt;# Not sure if needed, found it in several documentations&lt;/span&gt;
&lt;span class="c"&gt;########################################################&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; extends java.util.ListResourceBundle &lt;span class="o"&gt;{&lt;/span&gt;
    protected Object[][] getContents&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; public class com.google.android.gms.common.internal.safeparcel.SafeParcelable &lt;span class="o"&gt;{&lt;/span&gt;
    public static final &lt;span class="k"&gt;***&lt;/span&gt; NULL&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keepnames&lt;/span&gt; @com.google.android.gms.common.annotation.KeepName class &lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nt"&gt;-keepclassmembernames&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @com.google.android.gms.common.annotation.KeepName &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keepnames&lt;/span&gt; class &lt;span class="k"&gt;*&lt;/span&gt; implements android.os.Parcelable &lt;span class="o"&gt;{&lt;/span&gt;
    public static final &lt;span class="k"&gt;**&lt;/span&gt; CREATOR&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;########################################################&lt;/span&gt;
&lt;span class="c"&gt;# Not sure if needed, found it in several documentations&lt;/span&gt;
&lt;span class="c"&gt;########################################################&lt;/span&gt;

&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Capacitor v3 plugins and annotations&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; @com.getcapacitor.annotation.CapacitorPlugin public class &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    @com.getcapacitor.annotation.PermissionCallback &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
    @com.getcapacitor.annotation.ActivityCallback &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
    @com.getcapacitor.annotation.Permission &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
    @com.getcapacitor.PluginMethod public &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Capacitor v3 plugins and annotations&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;

&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Capacitor v2 plugins and annotations&lt;/span&gt;
&lt;span class="c"&gt;# These are deprecated. &lt;/span&gt;
&lt;span class="c"&gt;# But can still be used with Capacitor for now &lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; @com.getcapacitor.NativePlugin public class &lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  @com.getcapacitor.PluginMethod public &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Capacitor v2 plugins and annotations&lt;/span&gt;
&lt;span class="c"&gt;# These are deprecated.&lt;/span&gt;
&lt;span class="c"&gt;# But can still be used with Capacitor for now&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;

&lt;span class="c"&gt;###########################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Cordova plugins&lt;/span&gt;
&lt;span class="c"&gt;###########################&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; public class &lt;span class="k"&gt;*&lt;/span&gt; extends org.apache.cordova.&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  public &amp;lt;methods&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
  public &amp;lt;fields&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c"&gt;###########################&lt;/span&gt;
&lt;span class="c"&gt;# Rules for Cordova plugins&lt;/span&gt;
&lt;span class="c"&gt;###########################&lt;/span&gt;

&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Note! this rules add if you use Huawei Plugins&lt;/span&gt;
&lt;span class="c"&gt;# HMS Settings&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="nt"&gt;-ignorewarnings&lt;/span&gt;
&lt;span class="nt"&gt;-keepattributes&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;Annotation&lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="nt"&gt;-keepattributes&lt;/span&gt; Exceptions
&lt;span class="nt"&gt;-keepattributes&lt;/span&gt; InnerClasses
&lt;span class="nt"&gt;-keepattributes&lt;/span&gt; Signature
&lt;span class="nt"&gt;-keep&lt;/span&gt; class com.huawei.hianalytics.&lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class com.huawei.updatesdk.&lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-keep&lt;/span&gt; class com.huawei.hms.&lt;span class="k"&gt;**&lt;/span&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;-repackageclasses&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;span class="c"&gt;# Note! this rules add if you use Huawei Plugins&lt;/span&gt;
&lt;span class="c"&gt;# HMS Settings&lt;/span&gt;
&lt;span class="c"&gt;################################################&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h5&gt;
  
  
  &lt;strong&gt;NOTE&lt;/strong&gt; 📝
&lt;/h5&gt;

&lt;p&gt;Remember to check if any other package you use in your project has notes about another rule you must bed. Because use the &lt;strong&gt;proguard-rules.pro&lt;/strong&gt; may break your app if you don't pay attention or omit those rules the &lt;strong&gt;author&lt;/strong&gt; of the package gives you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Rooted Device Checking &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;You can achieve these by using the &lt;strong&gt;Diagnostic Plugin&lt;/strong&gt; to check if the device is rooted. Keep in mind that have many other functions if you want to check it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dpa99c/cordova-diagnostic-plugin#isdevicerooted" rel="noopener noreferrer"&gt;Cordova Diagnostic Plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detect Jailbreak Phone &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Another layer will be to use some library to check if your app is launched on an insecure OS like Jailbreak. I found this library to help prevent the &lt;strong&gt;Jailbreak&lt;/strong&gt; and the documentation for setting it up.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/WuglyakBolgoink/cordova-plugin-iroot" rel="noopener noreferrer"&gt;Jailbreak/Root Detection Plugin for Apache Cordova&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>ionic</category>
      <category>tutorial</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Add security when building mobile apps</title>
      <dc:creator>Julio Merlo</dc:creator>
      <pubDate>Tue, 31 Jan 2023 00:39:32 +0000</pubDate>
      <link>https://forem.com/acronimax/add-security-when-build-mobile-apps-18h1</link>
      <guid>https://forem.com/acronimax/add-security-when-build-mobile-apps-18h1</guid>
      <description>&lt;p&gt;Security is a fundamental term to discuss, but in this little blog based on my experience, I hope this will help you build more secure apps or add some security layers when making apps with the &lt;strong&gt;Hybrid Cross Platform Technologies&lt;/strong&gt; or just &lt;strong&gt;Native App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we begin, you must back up your project in case you need to roll back any change you did it. Remember that some tips are just for a specific framework, and others can be shared.&lt;/p&gt;

&lt;h1&gt;
  
  
  Content
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/acronimax/ionic-capacitor-security-tips-31jg"&gt;Ionic + Capacitor Security Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/acronimax/android-security-tips-6dn"&gt;Android Security Tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blockchain</category>
      <category>crypto</category>
      <category>web3</category>
      <category>offers</category>
    </item>
  </channel>
</rss>
