Switch to aapt2 for getting minSdkVersion
aapt does not support parsing some referencing attributes. Switch to latest tool, aapt2, which works better. Test: aapt2 dump badging test.apk and returned 0. Test: Run check_target_files_signatures.py with a target_files.zip. Test: Run sign_target_files_apks.py with a target_files.zip. Change-Id: Ib3a4740506f29ebab6930767f2aa8a0b5c4ba053
This commit is contained in:
@@ -3588,7 +3588,7 @@ endif
|
|||||||
ifeq ($(build_otatools_package),true)
|
ifeq ($(build_otatools_package),true)
|
||||||
|
|
||||||
INTERNAL_OTATOOLS_MODULES := \
|
INTERNAL_OTATOOLS_MODULES := \
|
||||||
aapt \
|
aapt2 \
|
||||||
append2simg \
|
append2simg \
|
||||||
avbtool \
|
avbtool \
|
||||||
blk_alloc_to_base_fs \
|
blk_alloc_to_base_fs \
|
||||||
|
@@ -37,7 +37,7 @@ python_library_host {
|
|||||||
// Only the tools that are referenced directly are listed as required modules. For example,
|
// Only the tools that are referenced directly are listed as required modules. For example,
|
||||||
// `avbtool` is not here, as the script always uses the one from info_dict['avb_avbtool'].
|
// `avbtool` is not here, as the script always uses the one from info_dict['avb_avbtool'].
|
||||||
required: [
|
required: [
|
||||||
"aapt",
|
"aapt2",
|
||||||
"boot_signer",
|
"boot_signer",
|
||||||
"brotli",
|
"brotli",
|
||||||
"bsdiff",
|
"bsdiff",
|
||||||
|
@@ -213,7 +213,7 @@ class APK(object):
|
|||||||
self.certs = frozenset(out)
|
self.certs = frozenset(out)
|
||||||
|
|
||||||
def ReadManifest(self, full_filename):
|
def ReadManifest(self, full_filename):
|
||||||
p = common.Run(["aapt", "dump", "xmltree", full_filename,
|
p = common.Run(["aapt2", "dump", "xmltree", full_filename, "--file",
|
||||||
"AndroidManifest.xml"],
|
"AndroidManifest.xml"],
|
||||||
stdout=subprocess.PIPE)
|
stdout=subprocess.PIPE)
|
||||||
manifest, err = p.communicate()
|
manifest, err = p.communicate()
|
||||||
|
@@ -1048,7 +1048,7 @@ def GetKeyPasswords(keylist):
|
|||||||
def GetMinSdkVersion(apk_name):
|
def GetMinSdkVersion(apk_name):
|
||||||
"""Gets the minSdkVersion declared in the APK.
|
"""Gets the minSdkVersion declared in the APK.
|
||||||
|
|
||||||
It calls 'aapt' to query the embedded minSdkVersion from the given APK file.
|
It calls 'aapt2' to query the embedded minSdkVersion from the given APK file.
|
||||||
This can be both a decimal number (API Level) or a codename.
|
This can be both a decimal number (API Level) or a codename.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -1061,12 +1061,12 @@ def GetMinSdkVersion(apk_name):
|
|||||||
ExternalError: On failing to obtain the min SDK version.
|
ExternalError: On failing to obtain the min SDK version.
|
||||||
"""
|
"""
|
||||||
proc = Run(
|
proc = Run(
|
||||||
["aapt", "dump", "badging", apk_name], stdout=subprocess.PIPE,
|
["aapt2", "dump", "badging", apk_name], stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
stdoutdata, stderrdata = proc.communicate()
|
stdoutdata, stderrdata = proc.communicate()
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
raise ExternalError(
|
raise ExternalError(
|
||||||
"Failed to obtain minSdkVersion: aapt return code {}:\n{}\n{}".format(
|
"Failed to obtain minSdkVersion: aapt2 return code {}:\n{}\n{}".format(
|
||||||
proc.returncode, stdoutdata, stderrdata))
|
proc.returncode, stdoutdata, stderrdata))
|
||||||
|
|
||||||
for line in stdoutdata.split("\n"):
|
for line in stdoutdata.split("\n"):
|
||||||
@@ -1074,7 +1074,7 @@ def GetMinSdkVersion(apk_name):
|
|||||||
m = re.match(r'sdkVersion:\'([^\']*)\'', line)
|
m = re.match(r'sdkVersion:\'([^\']*)\'', line)
|
||||||
if m:
|
if m:
|
||||||
return m.group(1)
|
return m.group(1)
|
||||||
raise ExternalError("No minSdkVersion returned by aapt")
|
raise ExternalError("No minSdkVersion returned by aapt2")
|
||||||
|
|
||||||
|
|
||||||
def GetMinSdkVersionInt(apk_name, codename_to_api_level_map):
|
def GetMinSdkVersionInt(apk_name, codename_to_api_level_map):
|
||||||
|
Reference in New Issue
Block a user