# proguard

Published articles for proguard.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Obfuscation Fundamentals: Applying ProGuard and R8 Protections to Android Code

DevFeed: [Obfuscation Fundamentals: Applying ProGuard and R8 Protections to Android Code](<https://devfeed.tech/articles/obfuscation-32342.md>)

Original publisher: [Read original article](<https://dustn.dev/page/presentations/2019-07-24-obfuscation-fundamentals/>)

Author: dustin@dustn.dev (Dustin Summers)

Published: 2026-09-17T04:13:15.404035Z

Content type: tutorial

Language: en

Sources: [Dustin Summers](<https://devfeed.tech/sources/dustin-summers.md>)

Topics: [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [Android](<https://devfeed.tech/topics/android.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [meetup](<https://devfeed.tech/tags/meetup.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A presentation introducing obfuscation with ProGuard and R8, focused on applying protections to Android code. It explains how to diagnose the code entering and leaving these build tools.

### Source excerpt

This presentation was given at a MeetUp in DC. It corresponds to this series of blog posts, which is the first in a series to teach about Obfuscation/ProGuard/R8, and will primarily be centered around applying protections to Android Code. Tools such as R8 and ProGuard are available, but to many they are a black box that code goes into and stuff comes out. The following will demystify the black box, and teach developers how to properly diagnose the code going into and coming out of these build tools.

## Compliance Improvements, Simulator Updates, and More

DevFeed: [Compliance Improvements, Simulator Updates, and More](<https://devfeed.tech/articles/compliance-improvements-simulator-updates-and-more-19266.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/compliance-improvements-simulator-updates-and-more/>)

Author: Shai Almog

Published: 2026-04-03T00:00:00Z

Content type: release

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Java Language](<https://devfeed.tech/topics/java-language.md>), [Android](<https://devfeed.tech/topics/android.md>), [simulator](<https://devfeed.tech/topics/simulator.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [bug-fixes](<https://devfeed.tech/tags/bug-fixes.md>), [compatibility](<https://devfeed.tech/tags/compatibility.md>), [improvements](<https://devfeed.tech/tags/improvements.md>), [java-language](<https://devfeed.tech/tags/java-language.md>), [performance](<https://devfeed.tech/tags/performance.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

This Codename One update removes Proguard from the build process and replaces it with a custom compliance validator. It also rewrites String.split() calls for consistent simulator and device behavior, expands runtime support, enables newer Java features to remain compatible with Android JDK 17, and updates simulator location support.

### Source excerpt

In todays update were finally removing Proguard from the build process with many implications for all of us.

## Obfuscation Deep Dive: Enhancing R8 and ProGuard for Robust Android Code Protection

DevFeed: [Obfuscation Deep Dive: Enhancing R8 and ProGuard for Robust Android Code Protection](<https://devfeed.tech/articles/obfuscation-deep-dive-enhancing-r8-and-proguard-for-robust-android-code-protection-25958.md>)

Original publisher: [Read original article](<https://kirillr.medium.com/proguard-r8-obfuscation-dictionary-b4541a898eb8?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2025-05-19T07:40:40Z

Content type: tutorial

Language: en

Sources: [Stories by Kirill Rozov on Medium](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Reverse Engineering](<https://devfeed.tech/topics/reverse-engineering.md>), [Java](<https://devfeed.tech/topics/java.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [configuration](<https://devfeed.tech/topics/configuration.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [java](<https://devfeed.tech/tags/java.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>), [reverse-engineering](<https://devfeed.tech/tags/reverse-engineering.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

This tutorial explains how R8 and ProGuard obfuscate Android applications and why their default naming dictionaries can make reverse engineering easier. It presents custom dictionary configuration, Java reserved-keyword names, invalid Windows filename names, and per-build randomized dictionaries, while noting compatibility and testing risks.

### Source excerpt

Obfuscation is a crucial aspect of securing Android applications. While tools like R8 and ProGuard are commonly used, their default configurations primarily aim to reduce app size rather than fortify code against reverse engineering. This article delves into advanced obfuscation techniques to make reverse engineering harder. Understanding Obfuscation Obfuscation transforms readable code into a form that's difficult to interpret. For instance, UserManager might become a, and getUser() could be renamed to b(). R8 and ProGuard perform obfuscation alongside code shrinking and optimization. # R8/ProGuard default dictionary a b c ... z These tools use dictionaries to generate new names, typically starting with single letters (a to z) and progressing to combinations like aa, ab, etc. While this approach minimizes file size, it has drawbacks: Predictable Naming: Limited name variations make it easier to deduce original identifiers. Consistent Builds: Repeated builds produce identical obfuscated names, aiding pattern recognition. Simplified Reverse Engineering: Tools can exploit naming patterns across builds. To counter these issues, customizing the obfuscation dictionary is essential. Implementing Custom Dictionaries R8 and ProGuard allow the use of custom dictionaries via configuration files: # proguard-rules.txt # Add to R8/ProGuard config file -obfuscationdictionary obfuscation-dictionary.tx -classobfuscationdictionary class-dictionary.txt -packageobfuscationdictionary package-dictionary.txt By providing unique dictionaries, you can generate diverse and unpredictable obfuscated names. Advanced Dictionary StrategiesJava Reserved Keywords Using Java's reserved keywords (e.g., if, for, class) as obfuscated names can confuse decompilers, as these are invalid identifiers in source code but acceptable in bytecode. # Java Reserved Keywords dictionary do if for int new ... instanceof synchronized Example of deobfucated Java code with java reserved keywords dictionary package cla

## Wildcard ProGuard/R8 Rule Can Remove Android Synchronization Calls

DevFeed: [Wildcard ProGuard/R8 Rule Can Remove Android Synchronization Calls](<https://devfeed.tech/articles/how-to-break-your-android-app-with-proguard-r8-24744.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/how-to-break-your-android-app-with-proguard-r8-6566bc387b63?source=rss----65bd178b00af---4>)

Author: Paul Woitaschek

Published: 2021-03-02T15:19:22Z

Content type: tutorial

Language: en

Sources: [YAZIO Engineering - Medium](<https://devfeed.tech/sources/yazio-engineering-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [R8](<https://devfeed.tech/topics/r8.md>), [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-gradle-plugin](<https://devfeed.tech/tags/android-gradle-plugin.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [instrumentation](<https://devfeed.tech/tags/instrumentation.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

An Android debugging article explains how instrumentation tests and a network call began hanging after an Android Gradle Plugin update. The cause was a ProGuard/R8 `-assumenosideeffects` rule using a wildcard for `android.util.Log`, which also matched superclass methods including synchronization methods on `Object`.

### Source excerpt

I recently updated the android gradle plugin to 4.0.0. While developing, everything went smoothly and at some point I was ready to cut a release. The very last manual testing of the release app bundle was also fine so no Proguard / R8 issues on the first sight either. Then I thought: Let me check the CI results again. Everything was fine, but: The instrumentation tests. Almost all of them were timing out. After inspecting the logs, they all hang at the end of the on-boarding. Strangely the loading spinner was loading for way longer than the timeout should be. So I tested it on my phone and faced the same results. At that time I had no idea it was caused by updating AGP, so I did a 2 hours long git bisect. Okay, now lets create a minimal self reproducible bug report because I found a huge bug in AGP, everyone should know about immediately. I created a Hello World project that was making a single network call and printed it results into a TextView. Strangely here it did not reproduce. After experimenting with the OkHttp configuration and testing if it was related to some gradle plugin, I finally had the idea that it might be related to R8. So I added my proguard configuration and now the network call hang! Let's locate the issue further. I was step by step removing lines from my proguard configuration until only a single line was left: -assumenosideeffects class android.util.Log { public * ; } Now what is this? How is that even slightly related to anything? It should remove the log spam of some third party libraries we're using. So I was asking Mads Ager. (he works on D8/R8) you have to be very careful with -assumenosideeffects The problem is that in order for -assumenosideeffects to have the effect of actually removing calls, it matches up the class hierarchy. Therefore, this rule says that anything public in android.util.Log and its superclasses has no side-effects. That include the synchronization methods defined on Object. So, please don't use * wildcards in conne

## Analyze Stack Traces in Android Studio

DevFeed: [Analyze Stack Traces in Android Studio](<https://devfeed.tech/articles/analyze-stack-traces-in-android-studio-25825.md>)

Original publisher: [Read original article](<https://segunfamisa.com/posts/analyze-stack-trace-in-android-studio>)

Author: Segun Famisa

Published: 2020-06-22T09:00:00Z

Content type: tutorial

Language: en

Sources: [Segun Famisa](<https://devfeed.tech/sources/segun-famisa.md>)

Topics: [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Development](<https://devfeed.tech/topics/development.md>), [Firebase](<https://devfeed.tech/topics/firebase.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [debug](<https://devfeed.tech/tags/debug.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

A tutorial on using Android Studio's built-in stack trace analysis tool to format imported crash reports and make their entries clickable and navigable. It also discusses obfuscated stack traces from release builds using ProGuard or R8/D8.

### Source excerpt

Introduction As programmers, we spend a significant part of our time debugging errors. Stack traces are very useful in doing so, and careful analysis of the stack traces help us to locate and fix the problem. In this post, I'll show a quick way we can use Android Studio to make it easier to debug errors using the built-in "stack trace analysis" tool. Context As Android developers, once an app is released into the wild (i.e deployed on a device outside our development environment), we have to rely on crash reporting tools like Firebase Crash reporting, Instabug, Appsee, etc, to collect these reports and aggregate them for us. The experience of working with stack traces varies from whether we are in development or in production. In development, we often get the stack traces right there in the logcat of Android Studio where each line in the stack trace is a clickable link that takes us straight to corresponding line of code. On the other hand, when we collect crash reports and stack traces in the wild, we collect them as text - sometimes formatted, sometimes not. This adds the additional overhead of having to format the stack trace in order to be human-readable and then manually search for the corresponding lines of code in the IDE. Using the "Anaylze Stack Trace" tool Luckily for us, Android Studio solves a part of this problem and makes it easier for us when we are analyzing stack traces that are generated in the wild. When you receive a stack trace, you can import them into Android Studio and introduce all the nice formatting, hyperlink and navigating functionality that we get as if it's a crash from the logcat. The Android Developer docs page pretty much explains how to use this tool, but I'll summarize the steps here: In the Android Studio menu bar, navigate to "Analyze > Analyze Stack Trace or Thread Dump" Paste the stack trace in the window Click "Normalize" to format the stack trace - in case it is not already formatted. Click on "OK" to complete this. On click

## How an R8 ProGuard rule can break Android application synchronization

DevFeed: [How an R8 ProGuard rule can break Android application synchronization](<https://devfeed.tech/articles/how-to-break-your-android-app-with-proguard-r8-26006.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/how-to-break-your-android-app-with-proguard-r8-6566bc387b63?source=rss-fbf9b6d94e65------2>)

Author: Paul Woitaschek

Published: 2020-06-08T05:52:07Z

Content type: tutorial

Language: en

Sources: [Stories by Paul Woitaschek on Medium](<https://devfeed.tech/sources/stories-by-paul-woitaschek-on-medium.md>)

Topics: [R8](<https://devfeed.tech/topics/r8.md>), [Android Gradle Plugin](<https://devfeed.tech/topics/android-gradle-plugin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [android-gradle-plugin](<https://devfeed.tech/tags/android-gradle-plugin.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [bug](<https://devfeed.tech/tags/bug.md>), [ci](<https://devfeed.tech/tags/ci.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>), [synchronization](<https://devfeed.tech/tags/synchronization.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

The article investigates Android instrumentation tests and network calls hanging after an Android Gradle Plugin update. It traces the behavior to the R8 rule `-assumenosideeffects class android.util.Log { public * ; }`, which can treat synchronization methods inherited from `Object` as having no side effects. The author recommends avoiding wildcards with `-assumenosideeffects` and specifying exact signatures.

### Source excerpt

I recently updated the android gradle plugin to 4.0.0. While developing, everything went smoothly and at some point I was ready to cut a release. The very last manual testing of the release app bundle was also fine so no Proguard / R8 issues on the first sight either. Then I thought: Let me check the CI results again. Everything was fine, but: The instrumentation tests. Almost all of them were timing out. After inspecting the logs, they all hang at the end of the on-boarding. Strangely the loading spinner was loading for way longer than the timeout should be. So I tested it on my phone and faced the same results. At that time I had no idea it was caused by updating AGP, so I did a 2 hours long git bisect. Okay, now lets create a minimal self reproducible bug report because I found a huge bug in AGP, everyone should know about immediately. I created a Hello World project that was making a single network call and printed it results into a TextView. Strangely here it did not reproduce. After experimenting with the OkHttp configuration and testing if it was related to some gradle plugin, I finally had the idea that it might be related to R8. So I added my proguard configuration and now the network call hang! Let's locate the issue further. I was step by step removing lines from my proguard configuration until only a single line was left: -assumenosideeffects class android.util.Log { public * ; } Now what is this? How is that even slightly related to anything? It should remove the log spam of some third party libraries we're using. So I was asking Mads Ager. (he works on D8/R8) you have to be very careful with -assumenosideeffects The problem is that in order for -assumenosideeffects to have the effect of actually removing calls, it matches up the class hierarchy. Therefore, this rule says that anything public in android.util.Log and its superclasses has no side-effects. That include the synchronization methods defined on Object. So, please don't use * wildcards in conne

## ProGuard & R8: Part 2

DevFeed: [ProGuard & R8: Part 2](<https://devfeed.tech/articles/proguard-r8-part-2-32346.md>)

Original publisher: [Read original article](<https://dustn.dev/post/2019-11-20-android-build-pipeline-hands-on/>)

Author: dustin@dustn.dev (Dustin Summers)

Published: 2019-11-20T09:00:00Z

Content type: tutorial

Language: en

Sources: [Dustin Summers](<https://devfeed.tech/sources/dustin-summers.md>)

Topics: [R8](<https://devfeed.tech/topics/r8.md>), [Android](<https://devfeed.tech/topics/android.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [proguard-android-r8-smali-dalvik-jvm-kotlin-art-gradle-java](<https://devfeed.tech/tags/proguard-android-r8-smali-dalvik-jvm-kotlin-art-gradle-java.md>), [r8](<https://devfeed.tech/tags/r8.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [terminal](<https://devfeed.tech/tags/terminal.md>)

### AI overview

A hands-on tutorial covering the Android build pipeline with ProGuard and R8. It walks through compiling Java or Kotlin source code, using Android Build Tools, and examining generated bytecode.

### Source excerpt

This blog post is the second in a series to teach about the build tools ProGuard and R8, and the first in the hands-on portion of the series. In the first post I talked about the Android Build Pipeline. In this blog, I would like to actually reinforce those concepts with hands on exercises. If you haven't read the first blog on this topic, this is part two in that series, so I highly suggest going back and understanding that material first.

## Understanding the Android Build Pipeline with ProGuard and R8

DevFeed: [Understanding the Android Build Pipeline with ProGuard and R8](<https://devfeed.tech/articles/proguard-r8-part-1-32347.md>)

Original publisher: [Read original article](<https://dustn.dev/post/2019-11-6-understanding-the-android-build-pipeline/>)

Author: dustin@dustn.dev (Dustin Summers)

Published: 2019-11-06T12:08:40Z

Content type: tutorial

Language: en

Sources: [Dustin Summers](<https://devfeed.tech/sources/dustin-summers.md>)

Topics: [R8](<https://devfeed.tech/topics/r8.md>), [Code](<https://devfeed.tech/topics/code.md>), [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [software-development](<https://devfeed.tech/topics/software-development.md>), [Software](<https://devfeed.tech/topics/software.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [proguard-android-r8-smali-dalvik-jvm-kotlin-art-gradle-java](<https://devfeed.tech/tags/proguard-android-r8-smali-dalvik-jvm-kotlin-art-gradle-java.md>), [r8](<https://devfeed.tech/tags/r8.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

A tutorial explaining the Android build pipeline and where ProGuard and R8 fit into it. It introduces compilation stages, optimization, shrinking, and code obfuscation, with an emphasis on understanding and diagnosing how these tools transform source code into bytecode.

### Source excerpt

Tools such as R8 and ProGuard are available for free, but to many they are a black box that code goes into and stuff comes out. My goal is to demystify the black box and teach developers how to properly diagnose the code going into and coming out of these build tools. It will also explain why you should care and why applying these tools should be a priority before shipping any code into the wild.

## Kotlin-android-synthetics performance analysis (with ButterKnife)

DevFeed: [Kotlin-android-synthetics performance analysis (with ButterKnife)](<https://devfeed.tech/articles/kotlin-android-synthetics-performance-analysis-with-butterknife-38609.md>)

Original publisher: [Read original article](<https://krossovochkin.com/posts/2019_02_18_kotlin_android_synthetics_performance_analysis_with_butterknife/>)

Published: 2019-02-18T00:00:00Z

Content type: article

Language: en

Sources: [Vasya Drobushkov](<https://devfeed.tech/sources/vasya-drobushkov.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code generation](<https://devfeed.tech/topics/code-generation.md>), [Android](<https://devfeed.tech/topics/android.md>), [R8](<https://devfeed.tech/topics/r8.md>), [class](<https://devfeed.tech/topics/class.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [code-generation](<https://devfeed.tech/tags/code-generation.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [r8](<https://devfeed.tech/tags/r8.md>)

### AI overview

An analysis of Kotlin Android synthetics examines generated Java and bytecode, comparing the approach with vanilla findViewById and ButterKnife. It discusses generated cache code, lateinit null checks, HashMap boxing overhead, and how ProGuard or R8 can remove or optimize unused code in release builds.

### Source excerpt

Introduction After comment that synthetic is no longer recommended practice and some arguments I decided to go deeper into issue with performance of kotlin-android-synthetics by analyzing generated Java and byte code and comparing to other approaches (such as vanilla-*findViewById *and ButterKnife). Vanilla-findViewById This is sample Activity we'll work with throughout the article. Approach with *findViewById *will be our baseline. Sample consists of: *Activity *class One *TextView *property inside *Activity *with *lateinit *modifier

## TIP: Obfuscation Mapping File

DevFeed: [TIP: Obfuscation Mapping File](<https://devfeed.tech/articles/tip-obfuscation-mapping-file-19590.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/tip-obfuscation-mapping-file/>)

Author: Shai Almog

Published: 2018-10-15T00:00:00Z

Content type: tutorial

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [obfuscation](<https://devfeed.tech/topics/obfuscation.md>), [Android](<https://devfeed.tech/topics/android.md>), [Google Play](<https://devfeed.tech/topics/google-play.md>), [toolchain](<https://devfeed.tech/topics/toolchain.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apk](<https://devfeed.tech/tags/apk.md>), [apps](<https://devfeed.tech/tags/apps.md>), [build](<https://devfeed.tech/tags/build.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [mapping](<https://devfeed.tech/tags/mapping.md>), [obfuscation](<https://devfeed.tech/tags/obfuscation.md>), [programming](<https://devfeed.tech/tags/programming.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [toolchain](<https://devfeed.tech/tags/toolchain.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

This tutorial explains how ProGuard obfuscation affects Android stack traces and why the mapping file generated for each build is needed to interpret crashes and ANRs in Google Play. It advises uploading the mapping file that matches the submitted APK version.

### Source excerpt

Proguard is one of the most disliked aspects of Android programming. Developers attack it left and right because there are so many nuances to it. That's a huge mistake, proguard is one of the most important tools in our development toolchain. It makes our apps slightly more secure, much smaller and even slightly faster. Codename One apps use proguard by default for Android. This is a huge benefit in our case because the limits related to obfuscation are very similar to the limits related to portability.

## Migrating to Downloadable Fonts on Android

DevFeed: [Migrating to Downloadable Fonts on Android](<https://devfeed.tech/articles/migrating-to-downloadable-fonts-on-android-25650.md>)

Original publisher: [Read original article](<https://adambennett.dev/2018/06/migrating-to-downloadable-fonts-on-android/>)

Published: 2018-06-28T13:16:14Z

Content type: tutorial

Language: en

Sources: [Posts on Adam Bennett](<https://devfeed.tech/sources/posts-on-adam-bennett.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Font](<https://devfeed.tech/topics/font.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>), [SVG](<https://devfeed.tech/topics/svg.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [algorithms](<https://devfeed.tech/tags/algorithms.md>), [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [blog](<https://devfeed.tech/tags/blog.md>), [career](<https://devfeed.tech/tags/career.md>), [compose](<https://devfeed.tech/tags/compose.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [finance](<https://devfeed.tech/tags/finance.md>), [fonts](<https://devfeed.tech/tags/fonts.md>), [functional](<https://devfeed.tech/tags/functional.md>), [growth](<https://devfeed.tech/tags/growth.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [money](<https://devfeed.tech/tags/money.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [training](<https://devfeed.tech/tags/training.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This article explains how Blockchain migrated its Android app from bundled fonts and the Calligraphy library to Android's downloadable fonts. It describes runtime font loading through a font provider, support down to API 14 through Support Library 26.0.0, and Android Studio's generated manifest and XML configuration. It also notes that the interface exposed only regular and bold Montserrat variants.

### Source excerpt

This is a rehost of the article I wrote for the Blockchain Engineering blog. You can find the original article here. At Blockchain, we have many mobile users in bandwidth constrained environments such as developing countries. As such keeping the app small and lightweight is a priority for the Android team. Smaller app sizes increase both installs and conversion rates - important metrics for any mobile-focused company. We've used various techniques over the last year to prevent bloat to the app including shrinking what few PNGs we have, using VectorDrawables at every possible opportunity, and aggressively leveraging ProGuard.

## Efficiently reducing your method count

DevFeed: [Efficiently reducing your method count](<https://devfeed.tech/articles/efficiently-reducing-your-method-count-28645.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2016/05/06/methodcount/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2016-05-06T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [build times](<https://devfeed.tech/topics/build-times.md>), [Code](<https://devfeed.tech/topics/code.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [app](<https://devfeed.tech/tags/app.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [build](<https://devfeed.tech/tags/build.md>), [build-times](<https://devfeed.tech/tags/build-times.md>), [code](<https://devfeed.tech/tags/code.md>), [gradle-plugin](<https://devfeed.tech/tags/gradle-plugin.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [legacy-code](<https://devfeed.tech/tags/legacy-code.md>), [methodcount](<https://devfeed.tech/tags/methodcount.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

A tutorial on visualizing and reducing method counts in Android projects. It explains how to use the Dexcount Gradle Plugin to identify libraries that consume many methods, then discusses choosing smaller libraries, replacing dependencies, and using ProGuard to reduce method count.

### Source excerpt

As green field projects are a rare breed, chances are that you've inherited a legacy code base. If you're as lucky as me, that code base has over 65k methods causing the build times to be boringly slow.

## Droidcon Italy recap

DevFeed: [Droidcon Italy recap](<https://devfeed.tech/articles/droidcon-italy-recap-28644.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2016/04/08/droidconit/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2016-04-08T00:00:00Z

Content type: article

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [User Experience](<https://devfeed.tech/topics/user-experience.md>), [App](<https://devfeed.tech/topics/app.md>), [render](<https://devfeed.tech/topics/render.md>), [APK](<https://devfeed.tech/topics/apk.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Gson](<https://devfeed.tech/topics/gson.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [apk](<https://devfeed.tech/tags/apk.md>), [app](<https://devfeed.tech/tags/app.md>), [app-development](<https://devfeed.tech/tags/app-development.md>), [app-performance](<https://devfeed.tech/tags/app-performance.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [conference](<https://devfeed.tech/tags/conference.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [design](<https://devfeed.tech/tags/design.md>), [designer](<https://devfeed.tech/tags/designer.md>), [developer](<https://devfeed.tech/tags/developer.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [droidcon](<https://devfeed.tech/tags/droidcon.md>), [experience](<https://devfeed.tech/tags/experience.md>), [gson](<https://devfeed.tech/tags/gson.md>), [lint](<https://devfeed.tech/tags/lint.md>), [performance](<https://devfeed.tech/tags/performance.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [recap](<https://devfeed.tech/tags/recap.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

A recap of Droidcon Italy covering collaboration between developers and designers to improve user experience, Android layout rendering performance, and reducing DEX method counts through APK analysis, Proguard configuration, dependency cleanup, and tools such as ClassyShark.

### Source excerpt

A conference about our favorite Green little robots? In sunny Italy? With great food and a party? Yeah, I can image how you must feel in case you missed it... I on the other hand was fortunate enough to attend and speak at this awesome conference.

## Android Mini Commons - Kevin Galligan

DevFeed: [Android Mini Commons - Kevin Galligan](<https://devfeed.tech/articles/android-mini-commons-kevin-galligan-38046.md>)

Original publisher: [Read original article](<https://touchlab.co/2011-08-android-mini-commons>)

Published: 2011-08-28T04:00:00Z

Content type: article

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [IO](<https://devfeed.tech/topics/io.md>), [Code](<https://devfeed.tech/topics/code.md>), [file](<https://devfeed.tech/topics/file.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [files](<https://devfeed.tech/tags/files.md>), [io](<https://devfeed.tech/tags/io.md>), [proguard](<https://devfeed.tech/tags/proguard.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>)

### AI overview

The author created reduced-size Android versions of Apache Commons Lang and IO by removing substantial portions of their code. The resulting JARs were about one-third or less of their original sizes: Lang decreased from slightly over 300K to 111K, and IO from 160K to 52K.

### Source excerpt

Apologies in advance if I'm breaking the license or whatever. I really like Apache Commons stuff, specifically Lang and IO. They really help with strings, moving stuff around, etc. However, most of this stuff is designed for use on servers or where you don't care about bloat. If you use something like proguard to minimize the generated class/dex files, this may be a non-issue. However, I did it anyway.