반응형
[Android] Android12에서 File에 대한 직렬화(Serialization) 문제
gms:play-services-* 관련 버전 update
> targetSdkVersion = 31 관련
기존에 play service 라이브러리 버전 17을 사용했는데, PendingIntent에서 FLAG_IMMUTABLE 관련 에러가
com.google.android.gms:play-services-auth:17.0.0에서 발생합니다.
해결 방안은 라이브러리 버전을 올리면 됩니다.
# File 객체의 직렬화(Serialization) 와 역직렬화(Deserialization) 가 가능하도록 어댑터 추가
Android12 에서 File에 대한 직렬화가 이루어지지 않아 업로드 할 때 intent에서 값을 가져오지 못해 죽는현상이 발생
데이터를 직렬화, 역직렬화 할 때 File도 직렬화 될 수 있도록 어댑터를 추가했습니다
public class FileDeserializer implements JsonDeserializer<File> {
@Override
public File deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (json != null) {
JsonObject jsonObject = json.getAsJsonObject();
JsonElement je = jsonObject.get("path");
if (je != null) {
return new File(je.getAsString());
}
}
return null;
}
}
public class FileSerializer implements JsonSerializer<File> {
@Override
public JsonElement serialize(File src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("path", src.getAbsolutePath());
return jsonObject;
}
}
public String toJson() {
Gson gson = new GsonBuilder()
.registerTypeAdapter(File.class, new FileSerializer())
.registerTypeAdapter(Uri.class, new UriSerializer())
.registerTypeAdapter(Date.class, new DateSerializer())
.create();
# 해당 이슈 문제
UploadService 에서 intent 복구를 못했던 이슈가
사진 첨부시 (gson 에서 file 처리를 못해) File("null") 인스턴스가 ImageInfo 모델에 포함되어, 시리얼라이징 시 오류가 발생했던 것 으로 보이네요.
- 사진 선택 (이미지 추져)
- GallerySelectActivity 에서, 선택된 이미지 (ImageInfo) 리스트 전달
- 이때, ArrayList 를 json 으로 변환하여 intent 로 넘김
- Android 12 전 기기
-
{"file":{"path":"/storage/emulated/0/Android/..."}}
- Android 12 기기
{"file":{}}
- ArrayList 인스턴스를 json 에서 변환
- 이때, android 12 기기기는 위 문제로 인해 ImageInfo.file 이 File("null") 로 변환
- 전송
- UploadService 로 전송할 데이터 전달 (FileUploadParameters 로 ArrayList 전달)
- 이때, intent 처리가 시리얼/디시리얼라이징 되면서, File("null") 이 문제가 된것 으로 보임
- UploadService 로 전송할 데이터 전달 (FileUploadParameters 로 ArrayList 전달)
추후에 또 발생할수도 있으니 일단 메모..
반응형
'안드로이드 > SDK version' 카테고리의 다른 글
registerForActivityResult가 onResume보다 늦게 호출이 되는 문제 (0) | 2023.01.11 |
---|---|
[Android] Notification 오레오 대응 (0) | 2022.10.27 |
Android 11 분석 (2) | 2021.05.31 |
안드로이드 11 대응 (0) | 2021.03.25 |
안드로이드 10 (Q) 대응 (0) | 2021.03.25 |