1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-09-17 10:40:12 +02:00

Use proper AndroidManifest.xml parsing for labels - #58

This commit is contained in:
Daniel Martí 2015-06-03 14:35:50 +02:00
parent 87d409a55c
commit 7c2bd34c49

View File

@ -32,6 +32,7 @@ import magic
import logging import logging
import hashlib import hashlib
import socket import socket
import xml.etree.ElementTree as XMLElementTree
from distutils.version import LooseVersion from distutils.version import LooseVersion
from zipfile import ZipFile from zipfile import ZipFile
@ -909,33 +910,24 @@ def manifest_paths(app_dir, flavours):
# Retrieve the package name. Returns the name, or None if not found. # Retrieve the package name. Returns the name, or None if not found.
def fetch_real_name(app_dir, flavours): def fetch_real_name(app_dir, flavours):
app_search = re.compile(r'.*<application.*').search for path in manifest_paths(app_dir, flavours):
name_search = re.compile(r'.*android:label="([^"]+)".*').search if not has_extension(path, 'xml') or not os.path.isfile(path):
app_found = False
for f in manifest_paths(app_dir, flavours):
if not has_extension(f, 'xml') or not os.path.isfile(f):
continue continue
logging.debug("fetch_real_name: Checking manifest at " + f) logging.debug("fetch_real_name: Checking manifest at " + path)
for line in file(f): xml = parse_androidmanifest(path)
if not app_found: app = xml.find('application')
if app_search(line): label = app.attrib["{http://schemas.android.com/apk/res/android}label"]
app_found = True result = retrieve_string(app_dir, label)
if app_found: if result:
matches = name_search(line) result = result.strip()
if matches: return result
stringname = matches.group(1)
logging.debug("fetch_real_name: using string " + stringname)
result = retrieve_string(app_dir, stringname)
if result:
result = result.strip()
return result
return None return None
# Retrieve the version name # Retrieve the version name
def version_name(original, app_dir, flavours): def version_name(original, app_dir, flavours):
for f in manifest_paths(app_dir, flavours): for path in manifest_paths(app_dir, flavours):
if not has_extension(f, 'xml'): if not has_extension(path, 'xml'):
continue continue
string = retrieve_string(app_dir, original) string = retrieve_string(app_dir, original)
if string: if string:
@ -2064,3 +2056,8 @@ def write_to_config(thisconfig, key, value=None):
data += '\n' data += '\n'
with open('config.py', 'w') as f: with open('config.py', 'w') as f:
f.writelines(data) f.writelines(data)
def parse_androidmanifest(path):
XMLElementTree.register_namespace('android', 'http://schemas.android.com/apk/res/android')
return XMLElementTree.parse(path).getroot()