please find below link for understanding the entire structure binary xml ans .arsc
http://justanapplication.wordpress.com/android-internals/ My question is don't we have to move the bytes when we replace the string with bigger one, apart from changing the values you mentioned below On Tuesday, June 21, 2011 8:09:12 PM UTC-7, Illyoung Choi wrote: > > Hi All. > > Last day, I made a simple application for parsing an Android Resource > File (*.arsc) and modifying resource strings. > > I think this thing might be a help for someone, so I'll share the > structure of *.arsc that I understood. > > Since I could not spend many hours for this, my understanding is not > perfect and might be slightly wrong. > > > I patched string resource from *.apk. > Simply extracted *.apk with 7zip and got the resources.arsc file. > > Below are the structure of *.arsc > > struct ANDROID_RESOURCE_HEADER > { > int signature; // 0x000c0002, I assume this is a signature > int nImageLength; // total ARSC file size (bytes) > int nUnknown1[2]; // still unknown (not important for modifying > strings) > int nStringBlockLength; // total StringBlock(see below) size > int nStringCount; // total number of String Resources > int nUnknown2[4]; // still unknown (not important for modifying > strings) > } > > "struct ANDROID_RESOURCE_HEADER" is a header of ARSC file image. > So simply you can read this header information from file. > > After this header, you will meet the StringBlock > > StringBlock has 2Sections > { > [String Offset] > [String Data] > } > > String Offset Section has Offset Values of Specific Strings from > StringBlock Start Address. > > String Data Section has 2 Part > > String Data > { > [Length] > [String] > } > > Length part is 2byte. but, in AscII Mode, uses only 1byte. > Before reading String, you must check whether it is "Unicode" or > "AscII" format. > > in Unicode format, Length part will be used with 2bytes. > normally it is "0x??, 0x00" (only if it is not longer than 256 bytes) > > in AscII format, Length part will be used with 1bytes. but, they also > used second byte for mirroring. > if string length has a value 7, you will meet "0x07, 0x07" > > So, I checked whether both bytes have same value to check string > format. > > > Lastly, actual string data will be after this length part with "Zero > Terminal" > in Unicode format, surely, Zero Terminal will be 2 byte of zero. > > > > Whenever you change the string of this ARSC file, you should > recalculate these. > Length Part of String Data > String Offset of StringBlock > nImageLength of Header > nStringBlockLength of Header > > > After doing these all. > Simply, remove all JAR Signature (META-INF folder) from package. > Re-Archive with Zip and rename with *.apk. > Resign with your certificate by using "jarsigner" of JDK > > > > Thanks. -- -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en --- You received this message because you are subscribed to the Google Groups "Android Developers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.

