์์. ์ด์ ํ์ธ
target version์ด 31์ธ ํ๋ก์ ํธ์ target version์ 33์ผ๋ก ์์ ํ๋ค. ๊ทธ ํ cannot find symbol method setAppCacheEnabled(boolean) ๋ผ๋ ๋น๋ ์๋ฌ๋ฅผ ํ์ธํ๋ค.
์ดํด๋ณด๋ ๊ธฐ์กด์ ์ ์ฐ๋ ์ฝ๋๋ฅผ IDE์์ ํ์์๋ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ฃผ๊ณ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค.
๋ด๋ถ ์ฝ๋ ํ์ธ
WetSettings์ ๋ด๋ถ ์ฝ๋๋ฅผ ํ์ธํ๋ค.
target version์ด 31์ผ ๋์๋ Control ํค + ๋ง์ฐ์ค ํด๋ฆญ์ผ๋ก ๋ด๋ถ ์ฝ๋๋ก์ ์ด๋์ด ๊ฐ๋ฅํ๋๋ฐ, target version์ด 33์ผ ๋์๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ด๋ถ ์ฝ๋๋ก์ ์ด๋์ด ๋ถ๊ฐํ๋ค. WebSettings ํด๋์ค ์ฝ๋๋ฅผ ์ฐพ์๋์ ์ target version์ด 33์ผ ๋์ ํด๋น ์ฝ๋์ ๋ด๋ถ ์ฝ๋๋ฅผ ํ์ธํ๋ค.
์ํฉ ํ์ ํ๊ธฐ
๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ์ ํ์ธํ๋ค.
https://growup-lee.tistory.com/entry/WebView-setAppCacheEnabled-Deprecated
ํด๋น ๋ธ๋ก๊ทธ ๊ธ์ ์ฝ๊ณ target version 33์์์ WebSettings.setAppCacheEnabled()์ ์ฃผ์ ๋ด์ฉ์ด ์ดํด๊ฐ๋ค.
1) AppCache๊ฐ Chrome 85๋ฒ์ ๋ถํฐ ์ง์๋์ง ์๋๋ค.
2) ์๋๋ก์ด๋ WebView๋ Chromium๊ธฐ๋ฐ์ด๊ธฐ ๋๋ฌธ์ AppCache๊ด๋ จ API๊ฐ API Level 30๋ถํฐ Deprecated๋๋ค.
3) target version 33์์์ WebView๋ WebView 95 ์ด์์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฉ์๋๋ ๋์ํ์ง ์๋๋คno-op.
no-op์ ๋ป : http://ko.dictionary.education/english/dictionary/no-op
๊ตฌ๊ธ ์ชฝ์์ AppCache๋ฅผ ์ ๊ฑฐํ ๊ฑฐ๋ผ๊ณ ์จ๋์ ๊ธ๋ ์ ๋ธ๋ก๊ทธ ๊ธ ๋๋ถ์ ์์๋ค.
https://web.dev/appcache-removal/
Service Worker๋ก ๋ง์ด๊ทธ๋์ด์ ํ๋ผ๊ณ ํด์ ์ดํด๋ดค๋๋ฐ, ์๋๋ก์ด๋์์ ์ด๋ป๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ๋์ง์ ๋ํ ๊ธ์ ๋ชป ์ฐพ์๋ค๐๐ต ๊ตฌ๊ธ๋งํด๋ ์๋์จ๋ค๐ฅด ์ฝ๋ ์์ ์ ํด์ผ ํ๋๋ฐ, ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ๋ค. ๊ตฌ๊ธ๋ง์ ํ๋ฉด์ ์คํธ๋ ์ค ๋ฐ๊ณ ์๋ค๋ ๊ฑธ ์ธ์ํ๊ณ ์๋๋ฐ, ๊ธธ์ด ํธ์ด๋ ์คํ์ค๋ฒํ๋ก์ฐ ๋ต๋ณ์ ๋ฐ๊ฒฌํ๋ค.
https://stackoverflow.com/a/17429301
These have nothing to do with the default webview internal cache. Appcache is an entirely different feature mean to make you able to run the website w/o an internet connection. It does not work that great and probably you do not want to use it.
With setting this: viewer.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT) is enough.
AppCache๊ฐ ์น๋ทฐ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๊ฐ์ง๊ณ ์๋ ๋ด๋ถ ์บ์์๋ ๋ค๋ฅธ ์กด์ฌ๋ผ๋ ๊ฒ์ ์์๋ค. AppCache๊ฐ ์์ด๋, ์น๋ทฐ๋ ๊ธฐ๋ณธ ์บ์ ๊ธฐ๋ฅ์ ๋์ํ๋ค๋ ๊ฑฐ๋ค. ์ด์ ์ผ ์ฃผ์์ ๋ด์ฉ์ด ๋์ ๋ค์ด์จ๋ค.
์๋๋ก์ด๋ API ๋ ํผ๋ฐ์ค ๋ฌธ์์์ WebSettings ์ชฝ์ ๋ ์ด์ setAppCacheEnable()์ ํ์ ์ ์์ง๋ง
https://developer.android.com/reference/android/webkit/WebSettings
๋ก์ ์๋๋ก์ด๋ API ๋ ํผ๋ฌ์ค ๋ฌธ์๋ฅผ ์ฐพ์๊ณ , ์ฌ๊ธฐ์๋ WebSettings์ setAppCacheEnabled(boolean)์ ๋ํด ๋์จ๋ค.
์ด์ WebView์์ ๋ ์ด์ Applicatin Caches API, ์ฆ AppCache๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ AppCache์ ๊ด๋ จ๋ ๋ฉ์๋๋ค์ด ์์ ์ฌ๋ผ์ง๋ ๊ฒ ๋ง๋ค๋ ๊ฒ ์ดํด๋๋ค.
AppCache๋ ๋๊ตฌ๋ฅผ, ๋ฌด์์ ์ํด ์ฐ์๋ ๊ฑด๋ฐ
https://web.dev/appcache-beginner/#introduction
๊ตฌ๊ธ๋งํ๋ฉด AppCache๊ฐ ์ ๊ฑฐ๋๋ค๋ ๊ธ๋ง ๋์ค๋๋ฐ, ์ด๊ฑธ ์ฐพ์๋๋ค. Introduction ๋ถ๋ถ์ ๋ณด๋, ์ด ๊ธฐ๋ฅ์ ์คํ๋ผ์ธ ์ํ์ ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ฅ์ผ๋ก ๋ณด์ธ๋ค.
AppCache๊ฐ ์ ๊ฑฐ๋๋ค๋ ๊ธ์์๋ AppCache๊ฐ ์ ๊ณตํ๋ ์คํ๋ผ์ธ ๊ฒฝํ์ Service Worker๊ฐ ์ ๊ณตํ ๊ฑฐ๋ผ๋ฉฐ Service Worker๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ผ๊ณ ํ๋ค. AppCache๋ ์คํ๋ผ์ธ ์ํ์ ์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ฅ์ด ๋ง๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
https://web.dev/appcache-removal/
WebView์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Cache ๊ธฐ๋ฅ์ ๋ฌด์์ ํ๋๋ฐ
WebSetting์์ CacheMode ์ค์ ์ setCacheMode() ๋ฅผ ์ด์ฉํ๋ค.
The way the cache is used is based on the navigation type. For a normal page load, the cache is checked and content is re-validated as needed. When navigating back, content is not revalidated, instead the content is just retrieved from the cache.
๋ฐ๋ฒ์ญ
์บ์๊ฐ ์ฌ์ฉ๋๋ ๋ฐฉ์์ ํ๋ฉด์ ํ์ํ๋ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์ผ๋ฐ ํ๋ฉด์ ๋ก๋ํ ๋, ์บ์๋ฅผ ํ์ธํ๊ณ ์ฝํ ์ธ ๋ ํ์์ ๋ฐ๋ผ ์ฌ๊ฒ์ฆ๋๋ค. ํ๋ฉด ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ ๋, ์ฝํ ์ธ ๋ ์ฌ๊ฒ์ฆ๋์ง ์๋ ๋์ ์ ์บ์์ ๋ฐํ๋๋ค.
์น ํ์ด์ง ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ํ๋ฉด ์บ์๊ฐ ์ฌ์ฉ๋๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค.
WebSetting์ Cache Mode๋ฅผ ๋ค ๊ฐ์ง ๊ฐ์ง๊ณ ์๋ค. ์ด ๋ชจ๋๋ฅผ setCacheMode์ ๋งค๊ฐ๋ณ์๋ก ๋ฃ์ด์ ์ค์ ํ ์ ์๋ค.
- LOAD_DEFAULT : ์บ์๋ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋ง๋ฃ๋์ง ์์์ผ๋ฉด ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ค.
- LOAD_CACHE_ELSE_NETWORK : ์บ์๋ ๋ฆฌ์์ค๋ฅผ ๋ง๋ฃ๋์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉด ์ฌ์ฉํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ค.
- LOAD_NO_CACHE : ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ํญ์ ๋คํธ์ํฌ์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ค.
- LOAD_CACHE_ONLY : ์บ์์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ค. ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
๊ตฌ๊ธ ์๋๋ก์ด๋ ํ์ ์ด๋ ๊ฒ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ ์บ์ ๊ธฐ๋ฅ์ผ๋ก ๋ถ์กฑํ๋ค๊ณ ์๊ฐํ์์ด์ AppCache API๊น์ง ์ฌ์ฉํ๊ฒ ํด์คฌ๋ ๊ฑด๊ฐ๐ค
๊ตฌ๊ธ๋ง์ ํ๋ฉฐ ๋๋ ๊ฒ
- WebView์ ๊ดํ ์๋๋ก์ด๋ API ๋ ํผ๋ฐ์ค ๋ฌธ์๋ ์น์ ํ์ง ์๋ค.
- ๋ช๋ช ๋ค๋ฅธ ๋ธ๋ก๊ทธ ๊ธ๋ค์์ WebView ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, setAppCacheEnabled(false) ์ฝ๋๋ ์บ์๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ๋ชฉ์ ์ผ๋ก ์ผ์์ ์ฃผ์์ผ๋ก ์๋ ค์ค๋ค. ๋๋ ์ฒ์์๋ setAppCacheEnabled()๊ฐ ์บ์ ๋ฏธ์ฌ์ฉ/์ฌ์ฉ์ ์ค์ ํ๋ ๋ชฉ์ ์ผ๋ก ์ฐ์ด๋ ์ค ์์๋๋ฐ(๋ฉ์๋ ์ด๋ฆ๋ง ๋ณด๋ฉด ๊ทธ๋ ๊ฒ ๊ธฐ๋ฅ์ ์ ์ถํ๊ฒ ๋๋ค), ํค๋ฉ๊ณ ํค๋ฉ๋ ๊ณผ์ ์ ํตํด์ ์ค์ ๋ก๋ AppCache API์ ํ์ฑํ ์ค์ ๊ธฐ๋ฅ์์ ์๊ฒ ๋๋ค. ์ ๋ง ์น ์บ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด, setAppCacheEnabled(false)์ setCacheMode(LOAD_NO_CACHE)๊น์ง ์จ ์ฃผ๋ ๊ฒ ํ์คํ ๋์ํ๋ ์์ ์ธ ๊ฒ ๊ฐ๋ค.
- ์์์ ์ดํด๋ณธ ์คํ์ค๋ฒํ๋ก์ฐ ๊ธ https://stackoverflow.com/a/17429301์์ setCacheMode()๋ฅผ ์ฐ๋ ๊ฒ๋ง์ผ๋ก ์ถฉ๋ถํ๋ค๊ณ ํ๋ค. ์ด๋ setCacheMode์ setAppCacheEnabled์ ๊ธฐ๋ฅ ์ฐจ์ด๋ฅผ ๋ช ํํ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ํ ์ ์๋ ์ธ๊ธ์ธ ๊ฒ ๊ฐ๋ค.
์ฝ๋ ์์
์ด์ ๋ด๋น์๋ ์ด๋ค ๊ธฐ๋ฅ์ ์ํด์ setAppCacheEnable(false), setAppCacheEnable(true) ์ฝ๋๋ฅผ ๋ฃ์์์ง ์ ์ถํ๊ณ ์ฝ๋ ์์ ์ ํด์ผ๊ฒ ๋ค. ์ ๋ง AppCache API๋ฅผ ์ฌ์ฉํ๊ณ ์/์ฌ์ฉํ์ง ์๊ณ ์ ์ผ๋์ง, ์น๋ทฐ ์บ์๋ฅผ ์ฌ์ฉํ๊ณ ์/์ฌ์ฉํ์ง ์๊ณ ์ ์ผ๋์ง๋ฅผ ํ์ ํด์ผ ํ ๋ฏ ํ๋ค.
setAppCacheEnabled(false)
์ผ๋จ setAppCacheEnabled(false)์ ์ฝ๋๋ฅผ ์ด ์๋๋ ๋ฌด์์ด์์๊น. ํด๋น ์ฝ๋๊ฐ ์ฐ์ธ ์น๋ทฐ ํ๋ฉด๋ค์ ๊ณตํต ์น๋ทฐ๋ค์ด๋ค. ์๋ฅผ ํ๋ ๋ค์๋ฉด, ๊ณต์ง ๋ฆฌ์คํธ์์ ํญ๋ชฉ์ ์ ํํ๋ฉด ํด๋น ๊ณต์ง์ ๋ง๋ url์ ๋ก๋ํด ๋ณด์ฌ์ฃผ๋ ์น๋ทฐ์ด๋ค. ์ด๋ฌํ ํน์ฑ์ด๋ผ๋ฉด ์บ์๋ฅผ ์ฐ๊ณ ์ถ์ง ์์๋ ๊ฒ ๊ฐ๋ค. setCacheMode(LOAD_NO_CACHE) ์ฝ๋๋ ๋ณด์ด์ง ์๋๋ค.
setAppCacheEnabled(false) ์ฝ๋๋ฅผ ๊ทธ๋ฅ ์ง์ฐ๋ ๊ฒ์ผ๋ก ๋๋๋ ๋๋ค. ์๋ํ๋ฉด ์ค์ ๋ก ๊ธฐ๋ณธ ์บ์ ๋ชจ๋๋ก ์น๋ทฐ๋ ์ฐ์ด๊ณ ์์์ ํ ๋ ๋ง์ด๋ค. ์ ์ฝ๋๋ฅผ ์ง์ฐ๋ ์ง์ฐ์ง ์๋ , ์ฑ๋ทฐ ๋ด๋ถ ์บ์ ๋์์ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ค.
setAppCacheEnabled(false)๋ฅผ ์ฐ์ง ์์๋, ์๋ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก App Cache API๋ ๋นํ์ฑํ๋์ด ์๋ค๋ ๊ฒ์ด setAppCacheEnabled()์ ์ฃผ์ ๋ด์ฉ์ด๋ค. ์ด์ ๋ด๋น์๊ฐ ์ ๋ง App Cache API๋ฅผ ๋นํ์ฑํํ๊ณ ์ถ์ด์ ํด๋น ์ฝ๋๋ฅผ ์ด ๊ฒ์ด ์๋๋ผ, ์น ์บ์๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์์์ ํด๋น ๋ฉ์๋๋ฅผ ์ด๋ฆ๋ง ๋ณด๊ณ ์ผ๋ค๊ณ ์ ์ถํ๋ ๊ฒ์ด ๋ง๋ ๊ฒ ๊ฐ๋ค. setAppCacheEnabled(false)๋ ์ง์ฐ๊ณ , setCacheMode(LOAD_NO_CACHE)๋ฅผ ์ถ๊ฐํ๊ธฐ๋ก ํ๋ค.
setAppCacheEnabled(true)
setAppCacheEnabled(true)๋ฅผ ์ด ์ฝ๋๋ฅผ ํ์ธํ๋ค. ๊ฒฐ์ ์น๋ทฐ ํ์ด์ง์ด๊ณ , setAppCachePath() ์ฝ๋๋ ์์ฑ๋์ด ์์ด์, AppCache API๋ฅผ ์ ๋๋ก ํ์ฑํ์์ผฐ๋ค. setCacheMode() ์ฝ๋๋ ์๋ค. LOAD_DEFAULT ๋ชจ๋๋ก ๋์ํ๊ณ ์์๊ฒ ๋ค.
AppCache๊ฐ ์์ด๋ ๊ฒฐ์ ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ก ๋์๊ฐ๋ ๊ฒ ๋ง๊ฒ ์ง๋ง, ๋ถ์ํ ๋ง์์ ๋ค๋ฅธ ์น๋ทฐ ๊ฒฐ์ ์์ ์ฝ๋๋ค์ ์ข ์ดํด๋ดค๋ค.
https://developers.nicepay.co.kr/manual-app.php
https://shopby.works/guide/skin/dev-cover/app-payment-module?lv=11
๋ ์์ ๋ค setAppCacheEnabled() ๋ ์ฐ์ง๋ ์๊ณ , ๊ธฐ๋ณธ Cache ๋ชจ๋๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅํ๋ ๋ฏ ํ๋ค.
๊ทธ๋ผ, AppCache API ๊ด๋ จ ์ฝ๋๋ค์ ์ง์์ฃผ๋ ๊ฒ๋ง์ผ๋ก ์์ ์ ์ถฉ๋ถํ ๊ฒ ๊ฐ๋ค.
๋ฌผ๋ก ์์ ํ ์ฝ๋์ ๋ํด ํ ์คํธ๋ ํ์์ด๊ณ .
๊ตฌ๊ธ๋งํ๋ค๊ฐ ์ฐพ๊ฒ๋ ๊ฒ
์น ์บ์
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android][View] decor view (0) | 2023.02.16 |
---|---|
[Android][Lint] Missing baselineAligned attribute (0) | 2023.02.14 |
[Java] Collapse 'catch' blocks (0) | 2023.02.08 |
[Android][WebView] ์ฑ๊ณผ WebVeiw ๊ฐ ํต์ (0) | 2023.02.06 |
[Android][Toast] Can't toast on a thread that has not called Looper.prepare() (1) | 2023.02.01 |