這件事讓我感到困惑...爲什麼我的Android 2.2手機上可以使用java.text.Normalizer?
我正在檢查我的代碼,並決定將構建目標從2.3更改爲2.2,以確保我使用的每個2.3 API都包裝在一個漂亮的android.os.Build中。 VERSION.SDK_INT檢查。
但是在某處,我調用了java.text.Normalizer.normalize(),它不檢查SDK版本。好奇爲什麼這不是由QA發現的,我在調試模式下在2.2手機上啓動了應用程序,它工作正常!
該手機是LG-P505R 2.2.2版。
那麼,爲什麼這個2.2手機可以調用一些在2.3中添加的API?
我能想到的唯一合乎邏輯的解釋是製造商已將此API添加到Android堆棧。
[更新]更多...瘋狂
我測試此代碼在2.2。模擬器並能正常工作:
public class NormalizerTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String s = "This \"é\" will become an \"e\"";
final TextView tv = (TextView) findViewById(R.id.tv);
final String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
final Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
final String strNormalized = pattern.matcher(temp).replaceAll("");
tv.setText(strNormalized);
}
}
您使用任何兼容性罐子嗎?任何可能提供這些API的附加罐子? – chubbsondubs
@chubbard很好的問題。是的,我確實使用了一些庫。所以我創建了一個沒有任何jar的簡單項目並運行代碼。它運行良好。所以我沒有使用jar中的任何Normalizer。 –