この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaでの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、記事の最後で紹介します)
Google R8でアプリの難読化とコードの最適化を図る
Androidアプリは、逆コンパイルでソースを閲覧することが可能です。
アプリの脆弱性対策の観点で、難読化は有効です。
アプリの難読化
Google R8の難読化は単純でクラス名やメソッドを意味を持たない短縮した文字列に置換します。
メリットとして、コードを解析し難くなることと短縮化によるコードの圧縮があります。
デメリットとして、クラッシュ時のスタックトレースが置換された短縮された文字列で出力されます。
Google R8の難読化はモジュールのbuild.gradleのminifyEnabledで指定します。
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
}
}
}
trueで有効、falseで無効です。
プロジェクトのgradle.propertiesにGoogle R8を無効化する指定がある場合は削除します。
android.enableR8.fullMode=false
コードの最適化
Google R8のコードの最適化は未使用のコードとリソースを削除します。
Google R8の難読化はモジュールのbuild.gradleのshrinkResourcesで指定します。
android {
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
}
}
}
trueで有効、falseで無効です。
難読化の問題点
Google R8の難読化には大きな問題点があります。
ビルドは成功するがアプリを起動するとクラッシュすることがあります。
外部ライブラリを使用している場合、クラス名やメソッドが変更され、ClassNotFoundExceptionが発生します。
厄介なことに、使用している箇所と通らないとクラッシュしません。
難読化した場合、基本的に全画面、全機能についてアプリの動作確認が必要です。
proguard-rules.txtの記述例
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-if class androidx.credentials.CredentialManager
-keep class androidx.credentials.playservices.** { *; }
-keep class com.google.api.** { *; }
-dontwarn javax.naming.InvalidNameException
-dontwarn javax.naming.NamingException
-dontwarn javax.naming.directory.Attribute
-dontwarn javax.naming.directory.Attributes
-dontwarn javax.naming.ldap.LdapName
-dontwarn javax.naming.ldap.Rdn
-dontwarn org.ietf.jgss.GSSContext
-dontwarn org.ietf.jgss.GSSCredential
-dontwarn org.ietf.jgss.GSSException
-dontwarn org.ietf.jgss.GSSManager
-dontwarn org.ietf.jgss.GSSName
-dontwarn org.ietf.jgss.Oid
-dontwarn android.media.LoudnessCodecController$OnLoudnessCodecUpdateListener
-dontwarn android.media.LoudnessCodecController
ビルドで警告が出る場合は-dontwarnで無視、クラッシュする場合は-keepで難読化の対象から除外します。
今回は、ここまでです。
暑い季節にクーラーのない部屋で仕事するなら、コレです♪
誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にあるコメントか、
こちらから、お願いいたします♪
ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ
初めての Android のアプリ開発では、アプリケーション開発経験がない方や、
アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、
書籍などによる独学ではアプリ開発できるようになるには、かなりの時間がかかります。
オンラインスクールでの習得をおススメします。
未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪
コメント欄