안드로이드/SDK version

[Android] Android12에서 File에 대한 직렬화(Serialization) 문제

코딩하는후운 2022. 8. 3. 17:44
반응형

[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") 이 문제가 된것 으로 보임

 

 

추후에 또 발생할수도 있으니 일단 메모..

반응형