У меня есть этот код:
import static com.example.test.Utils.getPackageManagerReflection;
...
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PackageManager packageManagerReflection;
try {
packageManagerReflection = getPackageManagerReflection(...);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if(packageManagerReflection == null) {
finish();
return;
}
}
...
}
com.example.test.Utils.getPackageManagerReflection:
public static <A, B> B getPackageManagerReflection(A param1, Class<B> param2, byte[] param2, Object param4) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
...
}
Анализ сгенерированного apk с помощью Android Studio, в classes.dex существует packageManagerReflection, который легко читается, но getPackageManagerReflection
не делает:
.line 225
.end local v2 # "packageManagerReflection":Landroid/content/pm/PackageManager;
.end local v3 # "deviceId":Ljava/lang/String;
.end local v5 # "exception":Ljava/lang/IllegalArgumentException;
:catch_301
move-exception v2
.line 231
.local v2, "packageManagerReflection":Landroid/content/pm/PackageManager;
nop
Я использую последнюю версию Android Studio и все ее компоненты.
Почему имя для элемент packageManagerReflection
хранится в сгенерированном коде?
Я уже пытался переименовать его во что-то другое без reflection
в его имени (например, packageManagerRef
, но он все равно сравнивается в classes.dex.
Я также уже видел в seeds.txt
, mapping.txt
и usage.txt
в app/build/outputs/mapping/debug
, но это не произошло.
Большое спасибо!