2014-12-31 18 views
-1

今天我有一個非常糟糕的驚喜。我的應用程序,一旦用生產密鑰簽名,其工作方式與AndroidStudio簽署的默認密鑰不同。與生產密鑰簽署時應用程序的不同行爲

以前有沒有其他人有過這個問題?

這太可怕了! :)

+1

怎麼這麼?你能否提供更多的信息?如果它崩潰了,請提供一個logcat輸出。 –

+0

讓我猜,它功能和打破,並滯後和暫停..是這樣的事情? – Elltz

+0

您在部署構建時是否使用了proguard? – Chandrashekhar

回答

1

哇,我整理了一下,但我很幸運找到這麼快,因爲一旦應用程序簽署了,你不能再使用控制檯來調試你的應用程序......無論如何,這種行爲改變背後的原因是在我搖籃構建腳本我設置了「精縮」的屬性爲「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「。

我之前沒有使用縮小,所以我絕對沒有想到在原始代碼和縮小代碼之間會有一些變化!

到目前爲止我的結論是,如果你想縮小你的代碼,你最好在所有可能需要避免不愉快的意外的構建版本中使用它。

歡迎任何反饋! 謝謝, 保羅

+1

你*有*使用類似的名字。即使不考慮縮小的問題,這也不是好的做法。你爲什麼不做'fragment.getClass()。equals(MyFragment.class);'。一般來說,如果重構你的代碼打破它它是一個非常糟糕的跡象 –

+0

嗨理查德!感謝您的評論。你是對的,這是一個更好的方法,我會這樣做。再次感謝!保羅:) – Paul

相關問題