Build the payload image only during apk-in-apex signing
When doing apk-in-apex signing, the package name is not reserved during the apex repacking. As a result, the name accidentally reverts to 'com.android.wifi' from 'com.google.android.wifi'. This cl changes the behavior to call 'apexer' by passing the '--payload_only' argument. So we don't build the apex file from scratch and the old AndroidManifest.xml will be reused. BUG: 152084536 Test: unit tests pass Change-Id: I8332b2ee84832fb196f2e1c4309abac5ab92e153 Merged-In: I8332b2ee84832fb196f2e1c4309abac5ab92e153
This commit is contained in:
@@ -14,8 +14,10 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
import re
|
||||
import os
|
||||
import os.path
|
||||
import shutil
|
||||
import zipfile
|
||||
|
||||
import apex_utils
|
||||
@@ -32,6 +34,7 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase):
|
||||
self.testdata_dir = test_utils.get_testdata_dir()
|
||||
# The default payload signing key.
|
||||
self.payload_key = os.path.join(self.testdata_dir, 'testkey.key')
|
||||
self.apex_with_apk = os.path.join(self.testdata_dir, 'has_apk.apex')
|
||||
|
||||
common.OPTIONS.search_path = test_utils.get_search_path()
|
||||
|
||||
@@ -134,35 +137,43 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase):
|
||||
def test_ApexApkSigner_noApkPresent(self):
|
||||
apex_path = os.path.join(self.testdata_dir, 'foo.apex')
|
||||
signer = apex_utils.ApexApkSigner(apex_path, None, None)
|
||||
processed_apex = signer.ProcessApexFile({}, self.payload_key,
|
||||
None)
|
||||
processed_apex = signer.ProcessApexFile({}, self.payload_key)
|
||||
self.assertEqual(apex_path, processed_apex)
|
||||
|
||||
@test_utils.SkipIfExternalToolsUnavailable()
|
||||
def test_ApexApkSigner_apkKeyNotPresent(self):
|
||||
apex_path = os.path.join(self.testdata_dir, 'has_apk.apex')
|
||||
apex_path = common.MakeTempFile(suffix='.apex')
|
||||
shutil.copy(self.apex_with_apk, apex_path)
|
||||
signer = apex_utils.ApexApkSigner(apex_path, None, None)
|
||||
self.assertRaises(apex_utils.ApexSigningError, signer.ProcessApexFile, {},
|
||||
self.payload_key, None)
|
||||
self.assertRaises(apex_utils.ApexSigningError, signer.ProcessApexFile,
|
||||
{}, self.payload_key)
|
||||
|
||||
@test_utils.SkipIfExternalToolsUnavailable()
|
||||
def test_ApexApkSigner_signApk(self):
|
||||
apex_path = os.path.join(self.testdata_dir, 'has_apk.apex')
|
||||
apex_path = common.MakeTempFile(suffix='.apex')
|
||||
shutil.copy(self.apex_with_apk, apex_path)
|
||||
signer = apex_utils.ApexApkSigner(apex_path, None, None)
|
||||
apk_keys = {'wifi-service-resources.apk': os.path.join(
|
||||
self.testdata_dir, 'testkey')}
|
||||
|
||||
self.payload_key = os.path.join(self.testdata_dir, 'testkey_RSA4096.key')
|
||||
payload_pubkey = common.ExtractAvbPublicKey('avbtool',
|
||||
self.payload_key)
|
||||
signer.ProcessApexFile(apk_keys, self.payload_key, payload_pubkey)
|
||||
apex_file = signer.ProcessApexFile(apk_keys, self.payload_key)
|
||||
package_name_extract_cmd = ['aapt', 'dump', 'badging', apex_file]
|
||||
output = common.RunAndCheckOutput(package_name_extract_cmd)
|
||||
for line in output.splitlines():
|
||||
# Sample output from aapt: "package: name='com.google.android.wifi'
|
||||
# versionCode='1' versionName='' platformBuildVersionName='R'
|
||||
# compileSdkVersion='29' compileSdkVersionCodename='R'"
|
||||
match = re.search(r"^package:.* name='([\w|\.]+)'", line, re.IGNORECASE)
|
||||
if match:
|
||||
package_name = match.group(1)
|
||||
self.assertEquals('com.google.android.wifi', package_name)
|
||||
|
||||
@test_utils.SkipIfExternalToolsUnavailable()
|
||||
def test_ApexApkSigner_noAssetDir(self):
|
||||
apex_path = os.path.join(self.testdata_dir, 'has_apk.apex')
|
||||
no_asset = common.MakeTempFile(suffix='.apex')
|
||||
with zipfile.ZipFile(no_asset, 'w') as output_zip:
|
||||
with zipfile.ZipFile(apex_path, 'r') as input_zip:
|
||||
with zipfile.ZipFile(self.apex_with_apk, 'r') as input_zip:
|
||||
name_list = input_zip.namelist()
|
||||
for name in name_list:
|
||||
if not name.startswith('assets'):
|
||||
@@ -173,23 +184,4 @@ class ApexUtilsTest(test_utils.ReleaseToolsTestCase):
|
||||
self.testdata_dir, 'testkey')}
|
||||
|
||||
self.payload_key = os.path.join(self.testdata_dir, 'testkey_RSA4096.key')
|
||||
payload_pubkey = common.ExtractAvbPublicKey('avbtool',
|
||||
self.payload_key)
|
||||
signer.ProcessApexFile(apk_keys, self.payload_key, payload_pubkey)
|
||||
|
||||
@test_utils.SkipIfExternalToolsUnavailable()
|
||||
def test_ApexApkSigner_withSignerHelper(self):
|
||||
apex_path = os.path.join(self.testdata_dir, 'has_apk.apex')
|
||||
signer = apex_utils.ApexApkSigner(apex_path, None, None)
|
||||
apk_keys = {'wifi-service-resources.apk': os.path.join(
|
||||
self.testdata_dir, 'testkey')}
|
||||
|
||||
self.payload_key = os.path.join(self.testdata_dir, 'testkey_RSA4096.key')
|
||||
payload_pubkey = common.ExtractAvbPublicKey('avbtool', self.payload_key)
|
||||
|
||||
signing_helper = os.path.join(self.testdata_dir, 'signing_helper.sh')
|
||||
os.chmod(signing_helper, 0o700)
|
||||
payload_signer_args = '--signing_helper_with_files={}'.format(
|
||||
signing_helper)
|
||||
signer.ProcessApexFile(apk_keys, self.payload_key, payload_pubkey,
|
||||
payload_signer_args)
|
||||
signer.ProcessApexFile(apk_keys, self.payload_key)
|
||||
|
Reference in New Issue
Block a user