我的应用程序中有一小部分代码已存在超过2年,工作得很好。我们刚刚发现不在Oreo
设备上工作。这是代码:
Bitmap bm = getAsBitmap(200, 100, 5);
if (bm != null) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 50, stream);
return new String(Base64.encode(stream.toByteArray(), Base64.DEFAULT));
}
在Oreo
之前的所有Android版本(或至少API级别14-25)中,此代码会生成位图的base64编码字符串序列化。在 Oreo
中,它会生成一个空字符串。
使用调试器逐步执行它,很明显问题出在bm.compress()
- 运行后,流仍为空。如果我在Nougat
设备上调试相同的代码,我可以看到该流包含PNG数据。
我们的构建运行compileSdk 25
,但为了确保我将构建更新为compileSdk 26
并将构建工具和支持库更新为26;行为没有变化。