Почему я получаю исключение класса not found с AndroidJavaClass?
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.detectAll()
.penaltyLog()
.build();
StrictMode.setThreadPolicy(policy);
Я попробовал следующий код, но генерирует исключение для класса, не найденного для ThreadPolicy
#if UNITY_ANDROID
using (AndroidJavaClass strictModeClass = new AndroidJavaClass("android.os.StrictMode"))
{
using (AndroidJavaClass threadpolicy = new AndroidJavaClass("android.os.StrictMode.ThreadPolicy"))
{
AndroidJavaObject Builder = threadpolicy.Call<AndroidJavaObject>("Builder");
AndroidJavaObject permitall = Builder.Call<AndroidJavaObject>("permitAll");
AndroidJavaObject build = permitall.Call<AndroidJavaObject>("build");
strictModeClass.Call<AndroidJavaObject>("setThreadPolicy", build);
}
}
#endif
1 ответ
Он просто не может найти класс на стороне Java. Это может быть вызвано моей ошибкой, ProGuard запутывает имя класса или пакет и плагин с классом, не включенным в ваш проект.
В вашем случае вы получите исключение "класс не найден" в AndroidJavaClass("android.os.StrictMode.ThreadPolicy")
так как ThreadPolicy
это не пакет, а внутренний класс, поэтому чтобы различать эти два, вы должны сказать JRE, что вы ищете внутренний класс, и это можно сделать, заменив "."
во внутреннем классе с "$"
условное обозначение.
замещать
AndroidJavaClass threadpolicy = new AndroidJavaClass("android.os.StrictMode.ThreadPolicy")
с
AndroidJavaClass threadpolicy = new AndroidJavaClass("android.os.StrictMode$ThreadPolicy");