2011-11-18 54 views
1

這件事讓我感到困惑...爲什麼我的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); 
    } 
} 

Emulator settings

Results

+0

您使用任何兼容性罐子嗎?任何可能提供這些API的附加罐子? – chubbsondubs

+0

@chubbard很好的問題。是的,我確實使用了一些庫。所以我創建了一個沒有任何jar的簡單項目並運行代碼。它運行良好。所以我沒有使用jar中的任何Normalizer。 –

回答

0

所以現在我唯一的猜測是,它被公開在2.3,但它在那裏一直...

+0

這可能就像它一直在那裏,但沒有人注意到它,或直到你做到:) –

+2

這是否意味着在Android 2.2中使用它是安全的? – Pijusn

0

確認java.text.Normalizer在香草API8模擬器中完美工作。只需要將lint錯誤抑制添加到代碼中,以便eclipse進行編譯。

相關問題