今天我有一個非常糟糕的驚喜。我的應用程序,一旦用生產密鑰簽名,其工作方式與AndroidStudio簽署的默認密鑰不同。與生產密鑰簽署時應用程序的不同行爲
以前有沒有其他人有過這個問題?
這太可怕了! :)
今天我有一個非常糟糕的驚喜。我的應用程序,一旦用生產密鑰簽名,其工作方式與AndroidStudio簽署的默認密鑰不同。與生產密鑰簽署時應用程序的不同行爲
以前有沒有其他人有過這個問題?
這太可怕了! :)
哇,我整理了一下,但我很幸運找到這麼快,因爲一旦應用程序簽署了,你不能再使用控制檯來調試你的應用程序......無論如何,這種行爲改變背後的原因是在我搖籃構建腳本我設置了「精縮」的屬性爲「true」的發佈版本:
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「。
我之前沒有使用縮小,所以我絕對沒有想到在原始代碼和縮小代碼之間會有一些變化!
到目前爲止我的結論是,如果你想縮小你的代碼,你最好在所有可能需要避免不愉快的意外的構建版本中使用它。
歡迎任何反饋! 謝謝, 保羅
你*有*使用類似的名字。即使不考慮縮小的問題,這也不是好的做法。你爲什麼不做'fragment.getClass()。equals(MyFragment.class);'。一般來說,如果重構你的代碼打破它它是一個非常糟糕的跡象 –
嗨理查德!感謝您的評論。你是對的,這是一個更好的方法,我會這樣做。再次感謝!保羅:) – Paul
怎麼這麼?你能否提供更多的信息?如果它崩潰了,請提供一個logcat輸出。 –
讓我猜,它功能和打破,並滯後和暫停..是這樣的事情? – Elltz
您在部署構建時是否使用了proguard? – Chandrashekhar