2026/03/23

오늘의 이야기

Hi Developers at Billcorea (빌코리아),
After a recent review, we've found an issue with your app, 리모트 페이 (결제도 공유가 되나요, 원격 결제) (com.billcoreatech.remotepayment0119). See below for more information about your app's status and how to correct the issue


(Billcorea(빌코리아)의 개발자 여러분, 안녕하세요.
최근 검토 결과, 원격 페이(결제도 공유가 된다면, 원격 결제)(com.billcoreatech.remotepayment0119) 앱에서 문제가 발견되었습니다. 앱 상태 및 문제 해결 방법에 대한 자세한 내용은 아래를 참조하세요.)


 











Publishing status: Removed
Your app was removed from Google Play and won't be available to users until you submit a policy compliant update.

게시 상태: 삭제됨
앱이 Google Play에서 삭제되었으며 정책을 준수하는 업데이트를 제출할 때까지 사용자가 사용할 수 없습니다.


 


Eligibility issues by versions (버전별 적격성 문제)













App Bundle:9APK REQUIRES PROMINENT DISCLOSURE​
Your app is not compliant with the User Data and Mobile Unwanted Software policies. Your app is uploading users' File information without a prominent disclosure.

As per Google Play's User Data policy, in cases where your app's access, collection, use, or sharing of personal and sensitive user data may not be within the reasonable expectation of the user of the product or feature in question, you must provide an in-app disclosure of your data access, collection, use, and sharing and seek affirmative user consent.
Your use case requires a Prominent Disclosure in accordance with this policy.
The in-app Prominent Disclosure:


  1. Must comprehensively disclose how your app collects, uses, and shares user data.

    • To meet policy requirements, it's recommended that you reference the following example language format for Prominent Disclosure when it's required: "{This app} collects / transmits / syncs / stores {type of data} to enable {"feature"}, {in what scenario}."



  2. Must be within the app itself, displayed in the normal usage of the app, and not require the user to navigate into a menu or settings.

  3. Cannot only be placed in a privacy policy or terms of service.

  4. Cannot be included with other disclosures unrelated to personal and sensitive user data collection.


Requests for user consent:


  1. Must be clear and unambiguous.

  2. Must require affirmative user action (for example, tap to accept or tick a checkbox).

  3. Must not interpret navigation away from the disclosure (including tapping away, pressing the back or home button) as consent.

  4. Must not use auto-dismissing or expiring messages as a means of obtaining user consent.

  5. Must be granted by the user before your app can begin to collect or access personal and sensitive user data.


App Bundle:9APK HAS A PRIVACY POLICY​ BUT IT IS NOT ADEQUATE


  • Privacy Policy in Play Console


    • Privacy Policy in Play Console does not disclose the collection of File.

    • Privacy Policy in Play Console does not disclose the usage of collected File.

    • Please make sure your Privacy Policy is non-editable.



  • Privacy Policy in Play Distributed App

    • Your app is uploading users' File information without posting a privacy policy in Play Distributed App.






  • APK는 명시적 공개가 필요합니다
    앱이 사용자 데이터 및 원치 않는 모바일 소프트웨어 정책을 준수하지 않습니다. 앱이 명시적 공개 없이 사용자의 파일 정보를 업로드하고 있습니다.
    Google Play의 사용자 데이터 정책에 따라 귀하의 앱이 개인적이고 민감한 사용자 데이터에 대한 액세스, 수집, 사용 또는 공유가 해당 제품 또는 기능 사용자의 합당한 기대 범위 내에 있지 않을 수 있는 경우 귀하는 다음을 제공해야 합니다. - 귀하의 데이터 액세스, 수집, 사용 및 공유에 대한 앱 공개 및 긍정적인 사용자 동의를 구합니다.
    귀하의 사용 사례에는 이 정책에 따라 명시적 공개가 필요합니다.
    인앱 명시적 공개:
    앱에서 사용자 데이터를 수집, 사용 및 공유하는 방법을 포괄적으로 공개해야 합니다.
    정책 요구 사항을 충족하려면 필요할 때 명시적 공개에 대해 다음 예시 언어 형식을 참조하는 것이 좋습니다. 대본}."
    앱 자체 내에 있어야 하고 앱의 일반적인 사용 시 표시되어야 하며 사용자가 메뉴나 설정으로 이동할 필요가 없어야 합니다.
    개인 정보 보호 정책 또는 서비스 약관에만 배치할 수 없습니다.
    개인 및 민감한 사용자 데이터 수집과 관련되지 않은 다른 공개에 포함될 수 없습니다.
    사용자 동의 요청:
    명확하고 모호하지 않아야 합니다.
    긍정적인 사용자 작업이 필요해야 합니다(예: 탭 하여 수락하거나 확인란을 선택).
    공개에서 벗어나는 탐색(두드리기, 뒤로 또는 홈 버튼 누르기 포함)을 동의로 해석해서는 안 됩니다.
    자동 해제 또는 만료 메시지를 사용자 동의를 얻는 수단으로 사용해서는 안 됩니다.
    앱이 개인적이고 민감한 사용자 데이터를 수집하거나 액세스 하기 전에 사용자가 승인해야 합니다.

  • APK에는 개인정보 보호정책이 있지만 적절하지 않습니다.
    Play Console의 개인정보처리방침
    Play Console의 개인정보처리방침은 파일 수집을 공개하지 않습니다.
    Play Console의 개인정보처리방침은 수집된 파일의 사용을 공개하지 않습니다.
    개인 정보 보호 정책을 편집할 수 없는지 확인하십시오.
    Play 배포 앱의 개인정보처리방침
    귀하의 앱은 Play 배포 앱에 개인정보취급방침을 게시하지 않고 사용자의 파일 정보를 업로드하고 있습니다.


메일 본문 중에서



 




오늘은 이렇게 받은 앱의 게시 취소에 대한 조치 준비를 해야 할 것 같습니다.  ~


구글은 개인정보 취급에 대한 상당한 요구사항을 가지고 있습니다. 그것이 뭐 틀렸거나, 잘못되었거나 하지는 않습니다. 개인정보의 보호는 앱을 게시하여야 하는 입장에서는 누구나 해야 하는 것이기 때문입니다.


 


playstore에서 받은 앱으로 인해 나의 개인정보가 어딘가로 흘러들어간다는 것을 좋아할 사람은 아무도 없으니까요.


이전 까지는 그냥 블로그 페이지에 있는 개인정보 링크를 연결해 주는 것만으로도 해소가 되었던 부분이 있다고 하면 이번에는 어떤 조치를 해 주어야 나의 앱을 게시해 줄까는 고민을 해 보아야 할 것 같습니다. 


 


이 블로그 페이지 중에서도 개인정보 관리 지침으로 사용되는 게시물이 있기도 합니다. 그래야 온라인으로 관리를 할 수 있으니까요. 그런데 구글은 그것을 허용해 줄 것인가 하는 부분은 고민을 해 보아야 할 것 같습니다. 


 


아무튼 정리가 되기를 바라 봅니다. 


 


오늘도 행복한 하루 마무리 잘하시길 기원드립니다. 





오늘의 이야기

https://medium.com/@mortitech/exploring-side-effects-in-compose-f2e8a8da946b



 


Jetpack Compose Side Effects in Details


Optimizing UI Performance in Jetpack Compose with SideEffect, LaunchedEffect, and DisposableEffect. Learn how to manage UI effects.


medium.com




jetpack compose을 이용해 UI을 구성하다 보면 Database에서 데이터를 추출해 화면에 보여주는 작업을 하는 과정에서 만나는 불편(?)함을 해소하기 위해서 필요한 부분일 듯하여 스크랩을 해 두고자 합니다.


 


이유는 데이터를 읽어 오는 부분의 구현에서 데이터가 소량인 경우는 문제가 없으나, 데이터가 많은 경우 그 처리에서 화면에 표시되는 데이터를 재구성 하려면 listview, adapter 등을 이용하는 xml layout 부분에서는 이미 많은 정보들이 있기 때문에 쉽게 구현을 해 볼 수 있습니다. 


 


compose로 넘어오면 조금 상황이 달라집니다.  위 원본 출처의 summary을 읽어 보고 오겠습니다. 




다음은 SideEffect, DisposableEffect및 LaunchedEffect 사이의 차이점에 대한 요약입니다.



  • SideEffect상위 컴포저블이 재구성될 때 실행되며 컴포저블의 상태 또는 소품에 의존하지 않는 작업을 실행하는 데 유용합니다.

  • DisposableEffect상위 컴포저블이 처음 렌더링될 때 실행되며 컴포저블이 더 이상 사용되지 않을 때 정리해야 하는 리소스를 관리하는 데 유용합니다. 첫 번째 구성 또는 키 변경 시 트리거 되고onDispose 종료 시 메서드를 호출합니다 .

  • LaunchedEffect별도의 코루틴 범위에서 부작용을 실행하며 UI 스레드를 차단하지 않고 장기 실행 작업을 실행하는 데 유용합니다. 첫 번째 컴포지션 또는 키 변경 시 트리거 됩니다.




대표이미지



ui와 데이터를 표시가 실시간으로 변해야 하는 부분들이 발생하기 때문에 위 글에서 제시된 효과 및 코드 기술 방법을 익혀둘 필요가 있었습니다.  오늘도 잘 정리해 두고 나중에 써 보도록 하겠습니다.


 


즐~코딩


 





오늘의 이야기



#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase

🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 "혹시나~" 하면서 봤거든 ㅋㅋ

근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨

그것도 구글 Gemini로다가!

그래서 앱 하나 만들었지
👉 "로또 예상번호 by Gemini" 🎱

AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨

재미로 해도 좋고…
혹시 모르는 거잖아? 😏


https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127




오늘의 이야기

https://github.com/tylerbwong/stack/



 


GitHub - tylerbwong/stack: An Android app for browsing Stack Overflow and other Stack Exchange sites.


An Android app for browsing Stack Overflow and other Stack Exchange sites. - GitHub - tylerbwong/stack: An Android app for browsing Stack Overflow and other Stack Exchange sites.


github.com




이 글은 원본 페이지의 정보를 알아보는 페이지입니다.  stack을 알아보는 이유는 앱 개발을 하다 보면 발생하는 오류 또는 이슈를 만나게 되면 대부분 구글 검색을 통해서 알아보게 됩니다.  그런 이슈나 오류사항 등에 대한 정보를 찾을 수 있는 stackoverflow.com의 정보를 이용해서  그걸 조금 쉽게 사용할 수 있는 앱 개발 소스를 레퍼런스 할 수 있을 것 같아서


정리해 두고 하는 목적이 있습니다. 


 


이제 읽어 보도록 하겠습니다. 




개발


이 프로젝트의 목표는 최신 Android 라이브러리 및 도구에 대한 예제를 제공하는 것입니다. 몇 가지 주목할만한 예는 다음과 같습니다.



특징



  • 풍부한 Markdown/LaTeX 미리 보기로 질문, 답변 및 댓글 보기

  • Stack Exchange 사이트 찾아보기

  • 질문에 투표하거나 새로운 질문, 답변 및 의견을 게시하려면 로그인하세요.

  • 나중에 저장하기 위해 북마크 질문(일시적으로 깨졌습니다. #126 참조 )

  • 고급 필터 컨트롤로 질문 검색

  • 다른 사용자의 프로필 보기

  • Material 3 동적 테마 사용 가능

  • 질문/답변 딥링킹


하위 프로젝트


여기에서 몇 가지 유용한 Gradle 모듈도 찾을 수 있습니다.



 




stack overflow 웹 페이지



실제로 빌드된 앱은 아래 그림과 같이 동작 하더군요... 이제 쉽게 찾아볼 수 있을 것 같습니다.


실행된 앱 이미지



 





오늘의 이야기


#스하리1000명프로젝트

스치니들!
내가 만든 이 앱은, 내 폰에 오는 알림 중에서 중요한 키워드가 있는 경우
등록해둔 친구에게 자동으로 전달해주는 앱이야 📲

예를 들어, 카드 결제 알림을 와이프나 자녀에게 보내주거나
이번 달 지출을 달력처럼 확인할 수도 있어!

앱을 함께 쓰려면 친구도 설치 & 로그인해줘야 해.
그래야 친구 목록에서 서로 선택할 수 있으니까~
서로 써보고 불편한 점 있으면 알려줘 🙏

👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao





오늘의 이야기

https://android-developers.googleblog.com/2023/08/whats-new-in-jetpack-compose-august-23-release.html



 


What's new in the Jetpack Compose August '23 release


News and insights on the Android platform, developer tools, and events.


android-developers.googleblog.com




이 글은 위 링크에서 퍼온 글입니다.  앱 개발에서 차지하는 비용(?) 중에서 UI 구성은 많은 부분을 할애하도록 합니다. xml layout 을 이용해서 작업을 할 때보다는 compose을 활용하는 것이  효율성이나, 재활용성에 있어서는 많은 도움이 되고 있음을 느끼고 있는 중입니다. 


 


이 시점에 새로운 릴리즈가 나왔다고 하네요... 한번 읽어 보도록 하겠습니다.  아래 글은 원본 페이지의 번역본임을 밝혀 둡니다. 


 




성능


2021년에 Compose 1.0을 처음 출시했을 때 우리는 구축할 수 있는 견고한 기반을 제공하기 위해 API 표면을 올바르게 만드는 데 집중했습니다. 우리는 개발자가 프로덕션에서 안심하고 사용할 수 있도록 사용하기 쉽고 안정적인 강력하고 표현력이 풍부한 API를 원했습니다. API를 지속적으로 개선함에 따라 성능이 최우선 순위이며 2023년 8월 릴리스에서는 많은 성능 개선 사항을 달성했습니다.


수정자 성능


수정자는 이 릴리스에서 컴포지션 시간이 최대 80% 향상되어 성능이 크게 향상되었습니다 . 가장 좋은 점은 첫 번째 릴리스에서 API 표면을 올바르게 가져오는 작업 덕분에 대부분의 앱이 2023년 8월 릴리스로 업그레이드하는 것만으로 이러한 이점을 볼 수 있다는 것입니다.


회귀를 모니터링하고 성능 개선에 대한 투자 정보를 제공하는 데 사용되는 일련의 벤치마크가 있습니다. Compose의 초기 1.0 릴리스 이후 우리는 개선할 수 있는 부분에 집중하기 시작했습니다. 벤치마크는 수정자를 구체화하는 데 예상했던 것보다 더 많은 시간을 소비하고 있음을 보여주었습니다. 수정자는 컴포지션 트리의 대부분을 구성하므로 Compose의 초기 컴포지션 시간에 가장 큰 기여를 했습니다. 보다 효율적인 설계를 위한 수정자 리팩터링은 2022년 10월 릴리스에서 내부적으로 시작되었습니다.


2022년 10월 릴리스에는 가장 낮은 수준의 모듈인 Compose UI에 새로운 API 및 성능 개선 사항이 포함되었습니다.수정자는 서로 위에 구축되므로 다음 릴리스인 2023년 3월부터Compose Foundation에서 하위 수준 수정자를 마이그레이션 하기 시작했습니다.여기에는 graphicsLayer , 저수준 포커스 수정자, 패딩  오프셋이 포함됩니다 . 이러한 저수준 수정자는 Clickable과 같이 활용도가 높은 다른 수정자에서 사용되며 Text 와 같은 많은 프레임워크 컴포저블에서도 활용됩니다.. 2023년 3월 릴리스에서 수정자를 마이그레이션 하면 해당 구성요소의 성능이 향상되었지만 더 높은 수준의 수정자와 컴포저블 자체를 새로운 수정자 시스템으로 마이그레이션 할 수 있을 때 실질적인 이점이 있을 것입니다.


2023년 8월 릴리스에서 클릭 가능한 수정 자를 새로운 수정자 시스템으로 마이그레이션하기 시작하여 구성 시간을 크게 개선했으며 경우에 따라 최대 80%까지 향상되었습니다 . 이는 버튼과 같은 클릭 가능한 요소를 포함하는 지연 목록과 특히 관련이 있습니다. Clickable 에서 사용하는 Modifier.indication 은 아직 마이그레이션 과정에 있으므로 향후 릴리스에서 더 많은 이점을 얻을 수 있을 것으로 예상합니다.


이 작업의 일부로 원래 리팩터링에서 다루지 않은 구성된 수정자의 사용 사례를 식별하고 CompositionLocal 인스턴스를 사용하는 Modifier.Node 요소를 만들기 위한 새 API를 추가했습니다 .


현재 자체 수정자를 새 Modifier.Node API로 마이그레이션 하는 과정을 안내하는 문서 작업을 진행 중입니다. 바로 시작하려면 저장소에서 샘플을 참조할 수 있습니다.


Android Dev Summit '22의 Compose Modifiers 심층 분석 에서 변경 사항의 근거에 대해 자세히 알아보세요.


메모리


이 릴리스에는 메모리 사용에 대한 여러 가지 개선 사항이 포함되어 있습니다. 서로 다른 Compose API에서 발생하는 할당을 면밀히 살펴보고 여러 영역, 특히 그래픽 스택 및 벡터 리소스 로딩에서 총할당을 줄였습니다. 이렇게 하면 Compose의 메모리 공간이 줄어들 뿐만 아니라 메모리 할당에 소요되는 시간이 줄어들고 가비지 수집이 줄어들기 때문에 성능이 직접적으로 향상됩니다.


또한 ComposeView 사용 시 메모리 누수를 수정하여 모든 앱에 도움이 되지만 특히 다중 활동 아키텍처 또는 많은 양의 View/Compose 상호 운용성을 사용하는 앱에 유용합니다.


텍스트


BasicText는 수정자 작업으로 지원되는 새로운 렌더링 시스템으로 이동하여 초기 구성 시간에 평균 22%의 이득을 가져왔고 텍스트와 관련된 복잡한 레이아웃의 한 벤치마크에서 최대 70%의 이득을 가져왔습니다.


다음을 포함하여 여러 Text API도 안정화되었습니다.



핵심 기능 개선 및 수정


또한 핵심 API의 새로운 기능과 개선 사항을 제공하고 일부 API를 안정화했습니다.



  • LazyStaggeredGrid 가 이제 안정되었습니다.

  • 반환된 객체가 원래 android.graphics.Paint를 래핑 하므로toComposePaint 를 대체하는 asComposePaint API가 추가되었습니다.

  • SubcomposeLayout에서 미리 보기를 지원하기 위해 IntermediateMeasurePolicy를 추가했습니다 .

  • 소프트 키보드 전에 키 이벤트를 가로채기 위해 onInterceptKeyBeforeSoftKeyboard 수정자를 추가했습니다.




이상으로 새로운 이야기를 읽어 보았습니다.  오늘 하루 마무리도 즐거운 시간이 되시길 기원합니다.


 


참고이미지



 





오늘의 이야기


집앞에는 못 달았지만 이렇게 라도 국기 게양을 해 봅니다.





오늘의 이야기


#스하리1000명프로젝트,
Manchmal ist es schwierig, mit ausländischen Arbeitnehmern zu sprechen, oder?
Ich habe eine einfache App erstellt, die hilft! Sie schreiben in Ihrer Sprache und andere sehen es in ihrer.
Die Übersetzung erfolgt automatisch basierend auf den Einstellungen.
Super praktisch für einfache Chats. Schauen Sie bei Gelegenheit vorbei!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416




오늘의 이야기

Jetpack Compose에는 6개의 주요 지연 레이아웃 구성요소가 있습니다.  그 6가지 주요 layout  구현에 대한 이해를 원본 출처를 참고해 배워 보세요.



  • LazyColumn — 세로로 스크롤되는 항목 목록

  • LazyRow - 가로로 스크롤되는 항목 목록

  • LazyVerticalGrid - 세로로 스크롤 가능한 요소 그리드

  • LazyHorizontalGrid - 가로로 스크롤 가능한 요소 그리드

  • LazyVerticalStaggeredGrid - 높이가 다양한 항목의 세로 스크롤 가능 그리드입니다.

  • LazyHorizontalStaggeredGrid — 다양한 높이를 가진 항목의 가로 스크롤 가능 그리드입니다.



https://medium.com/@daniel.atitienei/lazy-layouts-guide-in-jetpack-compose-1fd1c3df5497



 


Lazy Layouts Guide in Jetpack Compose


Lazy layouts are a set of UI components that enable you to show huge datasets in your app in an effective manner. Only the objects that are…


medium.com




 


다양한 화면 구현에 도움이 됩니다.  xml layout  에서는 listview에 adapter까지 구현을 하다 보면 손이 많이 가기도 했고, 재 활용성에 효율이 떨어지기도 했습니다. 하지만, jetpack compose로 전환하게 되면서부터는 재활용성에 대한 고민이 대폭 감소하고 있다는 생각이 듭니다. 


 


배워 두면 두고 두고 도움이 될 듯합니다. 


 







오늘의 이야기

Caused by com.google.crypto.tink.shaded.protobuf.z
Protocol message contained an invalid tag (zero).

 


앱을 구현하고 있는 동안에 소셜 로그인을 지원해 달라는 요청으로 앱에 소셜 로그인을 달았습니다. 


로그인 화면



그러던 어느 날 인가 로그인이 되지 않습니다. android 13 이후로부터 보안이 강화되었기도 하고  안드로이드 스튜디오의 버전이 올라가기도 했고요.


 


Android Studio Giraffe | 2022.3.1
Build #AI-223.8836.35.2231.10406996, built on June 29, 2023
Runtime version: 17.0.6+0-b2043.56-10027231 amd64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
Windows 11 10.0
GC: G1 Young Generation, G1 Old Generation
Memory: 4096M
Cores: 8
Registry:
    external.system.auto.import.disabled=true
    debugger.new.tool.window.layout=true
    ide.text.editor.with.preview.show.floating.toolbar=false
    ide.instant.shutdown=false
    ide.experimental.ui=true

Non-Bundled Plugins:
    com.jetbrains.kmm (0.6.1(223)-18)
    org.jetbrains.compose.desktop.ide (1.4.3)

 


그러면서 gradle 버전도 8.1.0 이 되었고 kotlin 도 버전이 1.8.22 이상으로 패치가 진행되었습니다.   그러다 보니 이제 보안이 점점 더 강화되는 느낌이기도 합니다. 


 



minifyEnabled true
shrinkResources true


구글에서는 코드 난독화나 앱의 크기를 줄이는 방안으로 압축을 요구하기도 합니다. 그러는 동안에 발생하는 이슈들은 전부다 개발자의 몫이 되기도 합니다. 


 


오늘은 그중에 소셜 로그인이 되지 않는 현상 (네이버로그인, 카카오톡 로그인 이 안돼요) 이 발생한 앱을 조치한 방법을 기술해 두고자 합니다. 


 


https://developers.naver.com/forum/posts/32767



 


개발자 포럼 - NAVER Developers


 


developers.naver.com




https://devtalk.kakao.com/t/kakao-sdk-login/108246



 


Kakao sdk login 시 크래쉬가 발생합니다


안녕하세요, 카카오 sdk 로그인 기능을 사용하는 도중 크래쉬가 발생해서 질문 남깁니다. 현재 카카오 톡으로 로그인하기와 카카오 계정으로 로그인하기 두가지를 사용하고 있는데요, LoginClient.i


devtalk.kakao.com




검색을 통해 이런저런 이슈가 있음을 알게 되었습니다. 


 


이런 검색 결과를 통해서 다음과 같은 수정을 진행했습니다.  아래 내용은 proguard-rules.pro 파일에 추가한 내용입니다.



# kakao minifyReleaseWithR8  2023.08.10 ~
-keep interface com.kakao.sdk.**.*Api

# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
-dontwarn org.conscrypt.Conscrypt$Version
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.ConscryptHostnameVerifier
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE
-dontwarn org.slf4j.impl.StaticLoggerBinder

# naver login 2023.08.10 ~
# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
# EnclosingMethod is required to use InnerClasses.
-keepattributes Signature, InnerClasses, EnclosingMethod

# Retrofit does reflection on method and parameter annotations.
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

# Keep annotation default values (e.g., retrofit2.http.Field.encoded).
-keepattributes AnnotationDefault

# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}

# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**

# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit

# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.KotlinExtensions
-dontwarn retrofit2.KotlinExtensions$*

# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>

# Keep inherited services.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface * extends <1>

# Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items).
-keep,allowobfuscation,allowshrinking interface retrofit2.Call
-keep,allowobfuscation,allowshrinking class retrofit2.Response

# With R8 full mode generic signatures are stripped for classes that are not
# kept. Suspend functions are wrapped in continuations where the type argument
# is used.
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation


 


이제 이것으로 앱을 빌드하여 릴리즈를 해 볼 예정입니다.   다른 이슈를 알게 되면 또 기술해 보겠습니다.


 





오늘의 이야기


#billcorea #운동동아리관리앱
🏸 Schneedle, eine unverzichtbare App für Badmintonvereine!
👉 Matchplay – Punkte aufzeichnen und Gegner finden 🎉
Perfekt für überall, alleine, mit Freunden oder im Club! 🤝
Wenn Sie Badminton mögen, probieren Sie es unbedingt aus

Zur App gehen 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay




오늘의 이야기

Hi Developers at Billcorea (빌코리아), After a recent review, we've found an issue with your app, 리모트 페이 (결제도 공유가 되나요, 원격 결제) (com.billcorea...