2014-12-31 2 views
-1

У меня был очень плохой сюрприз сегодня. Мое приложение, однажды подписанное с производственным ключом, не работает так же, как ключ по умолчанию, подписанный AndroidStudio.различное поведение приложения при подписании с производственным ключом

У кого-нибудь еще была эта проблема?

Это страшно! :)

+1

Как так? Не могли бы вы предоставить немного больше информации. Если он сбой, поставьте логарифмический вывод. –

+0

Позвольте мне угадать, он функционирует и ломается, а лагов и пауза .. это что-то в этом роде? – Elltz

+0

Вы используете proguard при развертывании сборки? – Chandrashekhar

ответ

1

Ничего себе, я разобрался, но мне посчастливилось найти так быстро, потому что, как только приложение подписано, вы больше не можете использовать консоль для отладки вашего приложения ... В любом случае причиной такого изменения было то, что в моем Gradle скрипт сборки Я установил «уменьшенная» атрибут «истинный» для построения релиза:

buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

на первый взгляд, все в порядке здесь, но проверить это. Я выполнял в своем коде некоторые вещи, только если текущий видимый фрагмент был экземпляр класса с именем «MyFragment»:

Fragment fragment = getCurrentFragment(); 
// check if the current fragment is the one which is expected 
if(fragment.getClass().getName().contains("MyFragment")) { 
    // if yes, update the value of the edit text 
    MyFragment mf = (MyFragment) fragment; 
    mf.setEditTextText(string); 
} 

я, наконец, смог увидеть, что, когда я был minfying Кодекса линии «фрагмент. getClass(). getName() "возвращался как значение" com.paul.MyFragment ", если не был проинформирован, и" com.paul.al.a "при минировании.

Раньше я не использовал мини-классификацию, поэтому я совершенно не ожидал изменения между оригиналом и мини-кодом!

Заключение до сих пор для меня заключается в том, что, если вы хотите минимизировать свой код, вам лучше сделать это во всех версиях сборки, которые вам могут понадобиться, чтобы избежать неприятных сюрпризов.

Любая обратная связь приветствуется! Спасибо, Paul

+1

У вас есть *, чтобы использовать имя класса, подобное этому. Это не очень хорошая практика, даже если вы не рассмотрите вопрос о мини-вопросе. Почему вы не делаете 'fragment.getClass(). Equals (MyFragment.class);'. Как правило, если рефакторинг ваш код нарушает его, это очень плохой знак –

+0

Привет, Ричард! Спасибо за этот комментарий. Вы абсолютно правы, это гораздо лучший подход, я сделаю это. Еще раз спасибо! Павел :) – Paul

Смежные вопросы