Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the file formats in Android WebView cache directory (data_1, f_000001 etc.)?

I created a rudimentary browser with help of a WebView.

When I visit a website (containing some text and a few images), the cache directory in /data/data/com.mayexample/cache/webViewCacheChromium gets filled with a few files called index, data_0, data_1, data_2, f_00001, f_00002 etc.

I was wondering, what's the format of these files, what do they contain? I thought about "so, a few of these files surely have to be the website's images then" and tried opening them in a file manager (open as image). But whatever file I pick, the process says "Failed loading!". Even if I rename some of them to .jpg, still I can't open anything. I have read on the internet that this worked for some people though (look at Android WebView - Load Images from cache, it's exactly what I want to do), but I can't do anything with the cache's files.

Do you know a way to open webview cache files? Doesn't one file represent a corresponding cached image for example?

What I really want to achieve (once I understand the structure of the cache files) is to programmatically fetch images of the webview from it's cache, like the author of the link posted above (unfortunately this posting's answers don't help much)

Thanks!

like image 669
Toni Kanoni Avatar asked Aug 29 '12 11:08

Toni Kanoni


1 Answers

The cached files might be one of the CSS, or JS/image/html types. On earlier Android releases, one cached file maps exactly one CSS or JS/image/html file.


As far as I know the Browser engine (actually the HTTP module) maintains such cached files in a URL-to-HashKey manner. So what you found (such as "4f42185de3a3a461_1") may be associated with any web resource files such as JS/CSS/images/HTML, etc.

I remember WebView used to store such URL-to-HashKey mapping data in sqlite3 tables in earlier Android versions.

The problem here is you have no idea about the mapping relations so you can hardly retrieve the file you want. A tricky way is to read the AOSP source code then you may be able to know how the generate the HashKey by an unique URL, or you can manipulate the sqlite3 tables, if there are still any on Android 4.4.

like image 138
Wei WANG Avatar answered Nov 05 '22 13:11

Wei WANG