为什么我的Android 2.2手机上有java.text.Normalizer?

时间:2011-11-18 16:06:28

标签: android android-2.2-froyo

这件事令我困惑......

我正在检查我的代码,并决定将构建目标从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

2 个答案:

答案 0 :(得分:0)

所以现在我唯一的猜测是它在2.3中被公开了,但它一直存在......

答案 1 :(得分:0)

确认java.text.Normalizer在vanilla API8模拟器中完美运行。只需要在代码中添加lint错误抑制以获得eclipse进行编译。