Garbled resources - G1 Q&A, Help & Troubleshooting

When I extract a APK file and go into res/xml the resources are all garbled up. How can I fix this?
Thanks,
Isaac

Can you please elaborate?

Figured it out. The resources are compiled. To decompile them you have to use the http://developer.android.com/guide/developing/tools/aapt.html AAPT tool.

Related

AndroidManifest.xml (and maybe other) problems

Hi all,
I modifed an app so that it would run on my phone--I have a cyanogen ROM, and it doesn't play well. The app runs fine on my wife's stock G1. Anyway, I used baksmali and smali to make the necessary changes, and it recompiles fine. I also "decrypted" the AndroidManifest.xml (from binary to text), resigned the package, and I get the dreaded "file does not contain AndroidManifest.xml" error.
Apparently, the AndroidManifest.xml doesn't get built back to its binary mode during the package signing.
1. How do I get AndroidManifest.xml back into its proper binary format?
2. Is there anything else I am missing?
Thanks.
The XML files are converted during the process of building the .apk file, i.e. by "aapt". You can do this manually if you want.
http://developer.android.com/guide/developing/tools/aapt.html
derfolo said:
I also "decrypted" the AndroidManifest.xml (from binary to text)
Click to expand...
Click to collapse
By what means did you accomplish this? Did you use aapt or did you do it manually?
lbcoder,
There is a handy tool to do this called AXMLPrinter2.jar. It is available here:
http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.jar&can=2&q=
I am having problems using aapt to "binarize" only the AndroidManifest.xml file. I can't package the entire app, because the baksmali files are not recognizable by Eclipse as java files, and when I use smali, it is all converted back into classes.dex. Any ideas?
Just to be clear, I am doing:
Code:
./aapt package -z -u -A ./app.directory -F ./app.name.apk
An .apk file pops up with no errors, but: 1) AndroidManifest.xml is not converted to binary, and 2) the same error "does not contain AndroidManifest.xml" occurs.
Thanks for any help.

[Q] How to edit framework-res.apk?

I'm trying to edit framework-res.apk so I can theme my rom. Are these the correct steps?
pull framework-res.apk from my phone
decompile the apk
make the changes
rebuild the apk
sign
zipalign
push apk back to device
I'm not too sure on this method as after I pushed back my modified apk, I get a load of force close errors
Any advice would be welcome
don't sign and don't zipalign and all are fine
I tried without sign and zipalign but the rom wouldnt boot. If I sign, I get force close errors
Does the rom need to be deoxed?
How is your process to decompile and recompile what tools do you use
vibez said:
I tried without sign and zipalign but the rom wouldnt boot. If I sign, I get force close errors
Does the rom need to be deoxed?
Click to expand...
Click to collapse
Sent from my GT-I9000 using XDA App
Is this an ODEXed ROM or a deOXEDed ROM? You can't mix and match. If you're not ODEXing any APKs after you've modified them then you need to make sure all APKs are deOXEDed.
setenza01 said:
How is your process to decompile and recompile what tools do you use
Sent from my GT-I9000 using XDA App
Click to expand...
Click to collapse
I use apk manager to decompile and rebuild
Benjamin Dobell said:
Is this an ODEXed ROM or a deOXEDed ROM? You can't mix and match. If you're not ODEXing any APKs after you've modified them then you need to make sure all APKs are deOXEDed.
Click to expand...
Click to collapse
It is a stock rom but there is no framework-res.odex does that mean it doesn't need deodexing even though there are odex files for every other apk in my system folder?
maybe this little monster is some help to you:
http://forum.xda-developers.com/showthread.php?p=7377678#post7377678
FadeFx said:
maybe this little monster is some help to you:
http://forum.xda-developers.com/showthread.php?p=7377678#post7377678
Click to expand...
Click to collapse
Nice app but this theme also needs .xml changes which this app doesnt support
ok, i put him a note in his thread about the xml changing issue, we will see what hes answer will be...
edit:
also this software could do the trick: http://android.modaco.com/content/t-mobile-pulse-pulse-modaco-com/302404/ande-android-design-editor/
I've been playing around a little more today and it seems the issue is that no tool can rebuild the xml files correctly, they seem to be compressed/encoded.
Has anyone been able to edit an xml file in framework-res.apk and have the phone read it properly?
vibez said:
I've been playing around a little more today and it seems the issue is that no tool can rebuild the xml files correctly, they seem to be compressed/encoded.
Has anyone been able to edit an xml file in framework-res.apk and have the phone read it properly?
Click to expand...
Click to collapse
Refer to my signature. Apk manager.
Edit : just read ur op.
Never sign the system apk's. Simply keep the original signatures intact and after recompiling them, re-include them.
So here are the rules u must follow :
If u've modified the manifest.xml, u must stop core, push the apk, start core or push the apk while in recovery.
If u've modified anything else, a simple push / reboot will do the trick.
Note, u cannot flash a modified system apk the first time (as in on a clean boot), u must flash the original rom, let it build the dex's and then flash ur modified apk.
Daneshm90 said:
Refer to my signature. Apk manager.
Edit : just read ur op.
Never sign the system apk's. Simply keep the original signatures intact and after recompiling them, re-include them.
Click to expand...
Click to collapse
Hi, I am already using apk manager but the xml files it creates do not seem to work.
To prove this, I have done a test. See the attached xml files,
original_stat_sys_battery.xml was extracted from the original framework-res.apk
I then used apk manager to decompile and then recompile the same apk without making any changes.
recompiled_stat_sys_battery.xml is this recompiled file
I then opened up both files and they look different to me
vibez said:
Hi, I am already using apk manager but the xml files it creates do not seem to work.
To prove this, I have done a test. See the attached xml files,
original_stat_sys_battery.xml was extracted from the original framework-res.apk
I then used apk manager to decompile and then recompile the same apk without making any changes.
recompiled_stat_sys_battery.xml is this recompiled file
I then opened up both files and they look different to me
Click to expand...
Click to collapse
That shouldn't concern u. Apktool's method of rebuilding the apk/arsc file is slightly different than how android originally builds an apk. What should concern u is if the apk simply works. Now when u decompile the apk, can u check the log to see if it reports of any missing resources, if it doesn't ur fine. So decompile the apk, make ur changes, recompile the apk, move the original meta-inf folder into ur new apk and push it to ur phone following the guidelines in my previous post. if it causes problems, post ur log and i'll take a look.
Ok this time I have added meta-inf to the new apk, pushed it to my phone and the phone hangs on boot.
Here is my log
--------------------------------------------------------------------------
|08/08/2010 -- 18:36:30.87|
--------------------------------------------------------------------------
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the file specified.
The system cannot find the path specified.
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)
'adb' is not recognized as an internal or external command,
operable program or batch file.
Could Not Find C:\Documents and Settings\Lee\Desktop\Apk_Manager_4.8\place-apk-here-for-modding\../place-apk-here-for-modding/repackaged.apk
Could Not Find C:\Documents and Settings\Lee\Desktop\Apk_Manager_4.8\place-apk-here-for-modding\../place-apk-here-for-modding/repackaged-signed.apk
Could Not Find C:\Documents and Settings\Lee\Desktop\Apk_Manager_4.8\place-apk-here-for-modding\../place-apk-here-for-modding/repackaged-unsigned.apk
The system cannot find the file specified.
I: Loading resource table...
I: Decoding resources...
I: Copying assets and libs...
W: Could not find sources
I: Checking whether resources has changed...
I: Building resources...
aapt: warning: string 'keyguard_password_attempts_count_pin_code' has no default translation in C:\Documents and Settings\Lee\Desktop\Apk_Manager_4.8\other\..\out\res; found: fr ko
I: Building apk file...
Click to expand...
Click to collapse
Oh lol i meant the log of ur phone.
Use adb logcat
lol ok, at which point should I run logcat - after the hang or as soon as I switch the phone on?
vibez said:
lol ok, at which point should I run logcat - after the hang or as soon as I switch the phone on?
Click to expand...
Click to collapse
When u switch phone On.
Ok here you are
vibez said:
Ok here you are
Click to expand...
Click to collapse
Heres ur culprit
Code:
java.lang.SecurityException: META-INF/MANIFEST.MF has invalid digest for AndroidManifest.xml
Now seems u modified the androidmanifest.xml ? If u didn't then heres my recommendation, copy over the original androidmanifest.xml from the original apk.

[Q] stat_sys_battery.xml

Hi!
what i try to do is to make my battery icon increase in 1% or 5% increments.
i got my icons and stat_sys_battery.xml from the "HTC Desire" post below
http://208.100.42.21/showthread.php?t=724778
however, after a few days trying it, i found i couldn't just drag and drop the icons to the "drawable-hdpi" folder and also not the XML files to the "drawable" folder.
"i think" this is because my OWN original XML files are all compiled and the XML copy from the HTC Desire post haven't compile, so when i replace the XML files it doesn't know how to locate the new battery PNGs
then further reading i found out "Apktool" which allows me to decompile the framework-res.apk so i can edit the XMLs
now ... my question is when i compile the folder i have the error:
w: could not find sources
i guess it's obvious that it can't find my folder ... so what the command so be?
the decompile folder is c:\apktool\test2
my compile command is apktool b test2
please help ... please explain a bit more your reply ... i am not a programmer/developer ... thanks.
kakyoin said:
Hi!
what i try to do is to make my battery icon increase in 1% or 5% increments.
i got my icons and stat_sys_battery.xml from the "HTC Desire" post below
http://208.100.42.21/showthread.php?t=724778
however, after a few days trying it, i found i couldn't just drag and drop the icons to the "drawable-hdpi" folder and also not the XML files to the "drawable" folder.
"i think" this is because my OWN original XML files are all compiled and the XML copy from the HTC Desire post haven't compile, so when i replace the XML files it doesn't know how to locate the new battery PNGs
then further reading i found out "Apktool" which allows me to decompile the framework-res.apk so i can edit the XMLs
now ... my question is when i compile the folder i have the error:
w: could not find sources
i guess it's obvious that it can't find my folder ... so what the command so be?
the decompile folder is c:\apktool\test2
my compile command is apktool b test2
please help ... please explain a bit more your reply ... i am not a programmer/developer ... thanks.
Click to expand...
Click to collapse
Im not exactly sure what errors you're getting... But heres two things that might help.
1. If you're using an already themed framework-res.apk to decompile/edit/recompile, don't. Apk Tool needs a clean version of your framework-res.apk. So use a clean version, decompile it, edit your xml, recompile, and finally copy/extract the edited xml file and put it into the framework-res.apk of your choosing.
2. Side Note: Sometimes Apk Tool will say something like "resources could not be found". I believe this is because apk tool tries to reverse engineer the apk to source, which it can't exactly do without all of the java resource files that was used to compile the apk. For XML files however, apk tool is sufficient.

[Q] resources.arsc not include

hi,
well i try it on systemui and framework-res.
With stock apk, i have no prob. decompiling and recompiling.
But if i change for example, an xml file for crt off in framework-res, and then recompile, (with suppressing of resources.arsc in keep folder of course), in the new apk i don't have the resource.arsc file.
i try on smali file too. I don't touch xml (so i let the resource.arsc in keep folder) but i modify a smali file. In the new apk, i have te resource.arcs but not the class.dex.
Anyone know why ? and how to resolve it ?
it happens as soon as i change a file. I am fed up with all of these. Help me please.
Thanks.

[Newbies][Documentation]What's an apk and how does it work

Quick Intro :
Let me answer that question, an apk, first of all, is the format of Android apps, as .exe would be for Windows, apk means Android Package by the way.
But what’s the big deal?
Well an apk contain a lot of things into it.
When you open it as an archive, you might get those files:
AndroidManifest.xml
assets
res
META-INF
resources.arsc
classes.dex
AndroidManifest.xml is the file that contains the information about the app itself: the list of all activities, all permissions, the name of the app’s package, and the software/hardware requirements. To be able to read it, you’ll need to decompile the apk file.
Assets and res folders are meant for resources. Most often, you won’t see the assets folder because its usage is limited, (explanations here). We’ll focus on res since asset isn’t used so often.
META-INF contains CERT.RSA and CERT.SF (certificate) as well as MANIFEST.MF (a manifest)
Those files are the app signature, and META-INF is the folder that contains signature.
The resources.arsc file is the file holding most of the resources that were originally in the res folder. After compiling the code, Android Studio (or others software) compile resources into this file. You won’t be able to open it with an archive explorer. We’ll need to decompile the apk to get the resources back into the res folder.
And, finally, the classes.dex file contains the every smali files of the app. A smali file contains the java code for a specific part of the app. To be able to have the smali files (into the smali folder), you’ll have to baksmali your app.
Hopefully, apktool (a reverse engineering tool) does it for you.
Let’s decompile the apk using apktool (a popular tool used to decompile apps):
Once apktool is installed (see the apktool web page to know how to install), you’ll need to use the command prompt to decompile the apk:
Code:
java -jar apktool.jar d [name of the apk].apk
(I advise to create a folder and to put every file needed in it: the apk, the apktool.jar file, and the apktool script).
You’ll have an out folder, and when you browse it, you’ll have most of the time:
AndroidManifest.xml
original (a folder)
res (a folder)
smali (a folder)
The AndroidManifest.xml that you see here is the translated one.
In the “original” folder rest the META-INF folder and the original AndroidManifest.xml file (untranslated). As you can guess by its name, this folder contains unchanged original files.
The res folder is now full, because every resource from the resources.arsc file are now back into the res folder
Same for the smali folder, this folder contains every piece of code contained into the classes.dex file.
We will now focus on the res folder. Now that it’s complete, we can see those folders (it depends on your apk, but here is the list of the most common ones):
anim (other animation stuff, see the links at the end of the thread)
animator (animation properties)
color (color state list: in which condition this color is used for a particular element)
drawable (can be pictures or xml files, it contains a lot of things)
layout (contains the files that define the layouts of the app)
mipmap (icons for different screen densities)
values (xml files that contains values, that will be referenced in other xml files in other folders)
xml (every other unclassified xml files)
Those folders contain files that will be named following their resource ID.
So how does all of this work together?
Well, the java code written in the smali files will call resources with their IDs. This way, the app will show you the write thing at the right moment, following the code. The layouts are already described in the layout folder. What the code really do is analyzing the action of the end user and calling other resources in consequence.
For example, I’m using the XDA Labs app on my phone. I’m in my phone’s section, and I’m about to click on a thread to open it.
I clicked on the thread, so the code loaded the thread layout with every post in it, and other resources such as the little arrows at the top to jump to the end/beginning of the thread, the reply button, its color, … That’s how to work if I want to keep it simple.
I tried, in this guide, to simplify android app basic for beginners. Feel free to ask any question, I’ll be glad to answer.
If you want to go further into it, you can read a very complete guide about app basics by google (it’s a bit complicated to read, assuming you’re just starting to understand).
Here are the links:
https://developer.android.com/guide
If you have any question about that guide, you can also ask me (with the quote you didn’t understood).
Keep at mind that mastering app basics is really important if you ever want to theme/create an app. So, this guide and the google one is a good place to start.
Have fun reading
Hello Raiz,
I decompiled the apk of an androind app from playstore using dex jar and apktool however I can't find the scripts anywhere in the resulting files. Where should I look? Or is there something more that I have to do? I'm trying to edit something for personal use to make the game more enjoyable. I saw a .unity3D file in there so I presume it was made in unity if this helps.
Good tutorial about concepts of APK file. The details you share are so educational. Thanks for sharing

Categories

Resources