src = os.path.normpath(apks[0])
# Make sure it's not debuggable...
- if common.isApkAndDebuggable(src):
+ if common.is_apk_and_debuggable(src):
raise BuildException("APK is debuggable")
# By way of a sanity check, make sure the version and version
return os.path.splitext(filename)[1].lower()[1:]
-def get_apk_debuggable_aapt(apkfile):
+def use_androguard():
+ """Report if androguard is available, and config its debug logging"""
+
+ try:
+ import androguard
+ if use_androguard.show_path:
+ logging.debug(_('Using androguard from "{path}"').format(path=androguard.__file__))
+ use_androguard.show_path = False
+ if options and options.verbose:
+ logging.getLogger("androguard.axml").setLevel(logging.INFO)
+ return True
+ except ImportError:
+ return False
+
+
+use_androguard.show_path = True
+
+
+def is_apk_and_debuggable_aapt(apkfile):
p = SdkToolsPopen(['aapt', 'dump', 'xmltree', apkfile, 'AndroidManifest.xml'],
output=False)
if p.returncode != 0:
return False
-def get_apk_debuggable_androguard(apkfile):
+def is_apk_and_debuggable_androguard(apkfile):
try:
from androguard.core.bytecodes.apk import APK
except ImportError:
return False
-def isApkAndDebuggable(apkfile):
+def is_apk_and_debuggable(apkfile):
"""Returns True if the given file is an APK and is debuggable
:param apkfile: full path to the apk to check"""
if get_file_extension(apkfile) != 'apk':
return False
- if SdkToolsPopen(['aapt', 'version'], output=False):
- return get_apk_debuggable_aapt(apkfile)
+ if use_androguard():
+ return is_apk_and_debuggable_androguard(apkfile)
else:
- return get_apk_debuggable_androguard(apkfile)
+ return is_apk_and_debuggable_aapt(apkfile)
def get_apk_id_aapt(apkfile):
testfiles.append(os.path.join(self.basedir, 'urzip-badsig.apk'))
testfiles.append(os.path.join(self.basedir, 'urzip-badcert.apk'))
for apkfile in testfiles:
- debuggable = fdroidserver.common.isApkAndDebuggable(apkfile)
+ debuggable = fdroidserver.common.is_apk_and_debuggable(apkfile)
self.assertTrue(debuggable,
"debuggable APK state was not properly parsed!")
# these are set NOT debuggable
testfiles.append(os.path.join(self.basedir, 'urzip-release.apk'))
testfiles.append(os.path.join(self.basedir, 'urzip-release-unsigned.apk'))
for apkfile in testfiles:
- debuggable = fdroidserver.common.isApkAndDebuggable(apkfile)
+ debuggable = fdroidserver.common.is_apk_and_debuggable(apkfile)
self.assertFalse(debuggable,
"debuggable APK state was not properly parsed!")