Методы отражения не работают, когда используется proguard для приложения Android - PullRequest
11 голосов
/ 22 октября 2011

Я сталкиваюсь с проблемой, когда использую proguard для приложения, использующего телефонную службу apis с использованием отражения в Android.

Я определил пакет com.android.internal.telephony и скопировал файл ITelephony.aidl.

Вот фрагмент кода, где я использую методы телефонии с использованием отражения.

Class<?> c = Class.forName(tm.getClass().getName());
Method m = c.getDeclaredMethod("getITelephony");
m.setAccessible(true);
com.android.internal.telephony.ITelephony telephonyService = 
     (com.android.internal.telephony.ITelephony) m.invoke(tm);

    if(buttonInAction == acceptButton){
       Log.v(TAG, "Answering the call");
       telephonyService.answerRingingCall();
       finish();
    }
    else{
       Log.v(TAG, "Rejecting the call");
       telephonyService.endCall();
       finish();
    }

Теперь без Proguard я могу использовать этот API, но когда я использую ProGuard для компиляции, это дает classcastexception. Я знаю, что мне нужно что-то добавить в файл proguard.cfg, и я также попробовал несколько вещей, таких как -dontshrink -dontoptimize, но все же это не сработало.

Пожалуйста, дайте мне знать, если я что-то упустил, что нужно добавить в этот файл или любое другое решение этой проблемы. Спасибо Nawab

1 Ответ

18 голосов
/ 24 октября 2011

Это решает проблему:

-keep class com.android.internal.telephony.ITelephony { *; }
...