Obfusquer et exécuter des applications Android peut entraîner des exceptions. Même si vous regardez la trace de la pile, vous ne pouvez pas dire quelle méthode a provoqué l'exception en raison de l'obscurcissement. Dans un tel cas, il s'agit d'une méthode pour identifier la méthode dans laquelle l'exception s'est produite.
Sur Android, les paramètres suivants peuvent être définis pour la sécurité et la réduction de la taille.
build.gradle
minifyEnabled true
shrinkResources true
Si vous essayez de l'exécuter avec ce paramètre, vous pouvez obtenir une exception.
Supposons que vous ayez l'implémentation suivante:
Calc.java
package com.example.myapplication;
public class Calc {
public int divide(int param1, int param2) {
return param1 / param2;
}
}
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Calc calc = new Calc();
int result = calc.divide(10, 0);
System.out.println(result);
}
}
Si vous faites cela, vous obtiendrez une exception sans division.
Trace de la pile
Caused by: java.lang.ArithmeticException: divide by zero
at b.a.a.a.a(:5)
at com.example.myapplication.MainActivity.onCreate(:13)
at android.app.Activity.performCreate(Activity.java:7009)
at android.app.Activity.performCreate(Activity.java:7000)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
En raison de l'obfuscation, le nom de la méthode dans laquelle l'exception s'est produite devient b.a.a.a.a </ code>, et je ne sais pas où l'exception s'est produite.
Il existe un fichier dans lequel vous pouvez voir le mappage avant et après l'obscurcissement.
Accédez au dossier de votre projet Android et recherchez «mapping» dans le champ de recherche.
"Mapping.txt" s'affiche dans les résultats de la recherche. Ouvrez ce fichier.
Le nom de la méthode b.a.a.a.a </ code> où l'exception s'est produite est représenté par le nom du package, le nom de la classe et le nom de la méthode.
Recherchez mapping.txt par nom de package et nom de classe (
b.a.a.a </ code>). La partie correspondante sera frappée ci-dessous.
mapping.txt
com.example.myapplication.Calc -> b.a.a.a:
3:3:void <init>() -> <init>
5:5:int divide(int,int) -> a
Si vous regardez le mappage, vous pouvez voir que le nom de la méthode ( a </ code>) où l'exception s'est produite est
divide </ code>.
Recommended Posts