Hi All
I've received a request from a fellow themer if there is anyway we could compile a XML without providing its resources.
At the moment, AFAIK (which is almost nothing), we are incapable of compile XMLs without providing all the resources addressed by them.
XML resources are addressed like:
(@ replaced by (at) due to mention system)
We have local resources like:
- (at)id/header_admin
- (at)dimen/membermgmt_header_marginleft
And there is also an external one:
- (at)ANDROID:layout/preference_category
While trying to accomplish this task, I've got to the following Python script that will generate all the /res/values/*.xml's that could be identified as local resources.
Please edit 'input_folder' accordingly.
Then, issuing the below command:
What I get from it now are only errors regarding external resources references not being found, as expected.
This is exactly the point where my shallow knowledge ends ...
Could someone, some way, point me the light (if there is any) how could we 'dummy' external resources as done with local ones?
Thank you all.
Nice regards.
.
I've received a request from a fellow themer if there is anyway we could compile a XML without providing its resources.
At the moment, AFAIK (which is almost nothing), we are incapable of compile XMLs without providing all the resources addressed by them.
XML resources are addressed like:
Code:
<include android:id="(at)id/header_admin"
android:layout_marginLeft=(at)dimen/membermgmt_header_marginleft"
layout=(at)ANDROID[/MENTION]:layout/preference_category" />
We have local resources like:
- (at)id/header_admin
- (at)dimen/membermgmt_header_marginleft
And there is also an external one:
- (at)ANDROID:layout/preference_category
While trying to accomplish this task, I've got to the following Python script that will generate all the /res/values/*.xml's that could be identified as local resources.
Code:
import os
import shutil
input_folder = '/home/Kdio/apk/Phone'
output_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), "out")
if not os.path.isdir(output_folder):
os.mkdir(output_folder)
tokens = {}
xmlExist = {}
for root, dirs, files in os.walk(input_folder):
for f in files:
inputFile = os.path.join(root, f)
filename, ext = os.path.splitext(inputFile)
if (ext != '.xml'):
continue
xmlExist[os.path.basename(inputFile)] = 1
with open(inputFile, 'r') as f:
for line in f:
token = ''
read_token = False
for c in line:
if (c == '@'):
read_token = True
continue
if (read_token is True):
if (c == '"'):
read_token = False
tokens[token] = 1
token = ''
else:
token += c
f.close()
xmls = {}
for token in sorted(tokens):
if (token == 'null'):
continue
if (':' in token):
continue
#token = token.split(':')[-1]
head, tail = token.split('/')
if (head == 'anim'):
continue
if ((tail + '.xml') in xmlExist.keys()):
continue
if (not head in xmls.keys()):
xmls[head] = {}
xmls[head][tail] = 1
#for xml in xmls:
# for res in xmls[xml]:
# print(xml + ' -> ' + res)
for xml in xmls:
xmlText = '<?xml version="1.0" encoding="utf-8"?>\n<resources>\n'
for res in xmls[xml]:
if (xml == 'bool'):
xmlText += ' <bool name="' + res + '">false</bool>\n'
if ((xml == 'id') or (xml == 'drawable') or (xml == 'style') or (xml == 'layout')):
xmlText += ' <item type="' + xml + '" name="' + res + '">false</item>\n'
if (xml == 'array'):
xmlText += ' <string-array name="' + res + '">\n <item>array-dummy</item>\n </string-array>\n'
if (xml == 'attr'):
xmlText += ' <attr name="' + res + '" format="string" />\n'
if (xml == 'color'):
xmlText += ' <color name="'+ res + '">#00000000</color>\n'
if (xml == 'dimen'):
xmlText += ' <dimen name="' + res + '">1.0dip</dimen>\n'
if (xml == 'integer'):
xmlText += ' <integer name="' + res + '">1</integer>\n'
if (xml == 'plural'):
xmlText += ' <plurals name="' + res + '">\n <item quantity="other">a</item>\n <item quantity="one">b</item>\n </plurals>\n'
if (xml == 'string'):
xmlText += ' <string name="' + res + '">a</string>\n'
if (xml == 'fraction'):
xmlText += ' <fraction name="' + res + '">1%</fraction>\n'
xmlText += '</resources>\n'
f = open(os.path.join(output_folder, xml + 's.xml'), 'w')
f.write(xmlText)
f.close
Then, issuing the below command:
Code:
aapt p -f -M onlyXMLs/AndroidManifest.xml -F onlyXMLs.zip -S onlyXMLs/res -I android.jar
What I get from it now are only errors regarding external resources references not being found, as expected.
This is exactly the point where my shallow knowledge ends ...
Could someone, some way, point me the light (if there is any) how could we 'dummy' external resources as done with local ones?
Thank you all.
Nice regards.
.