Почему я получаю исключение класса не найдено с AndroidJavaClass? - PullRequest
0 голосов
/ 08 ноября 2018
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 Ответ

0 голосов
/ 08 ноября 2018

Он просто не может найти класс на стороне 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");
...