Last active
December 14, 2015 12:58
-
-
Save nolanlawson/5090009 to your computer and use it in GitHub Desktop.
Fixes an Android APK built by PhoneGap Build to correct the problem of xhdpi images not being properly added (https://github.com/phonegap/build/issues/9). Requires apktool and jarsigner to already be installed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# fix an Android APK built by PhoneGap Build to correct the problem of | |
# xhdpi images not being correctly added (https://github.com/phonegap/build/issues/9) | |
# | |
# REQUIRES apktool and jarsigner to already be installed and on the PATH. | |
# | |
# usage: fix_android_apk.py www/config.xml InputFile.apk OutputFile.apk | |
# | |
import os,sys,shutil,tempfile,xml.dom.minidom | |
try: | |
(configXml, inputApk, outputApk) = sys.argv[1:] | |
assert outputApk.endswith('.apk') | |
except: | |
exit("usage: fix_android_apk.py www/config.xml InputFile.apk OutputFile.apk") | |
outputSignedApk = outputApk.replace('.apk','-signed.apk') | |
if os.path.exists(outputApk): exit("error: %s already exists" % (outputApk)) | |
if os.path.exists(outputSignedApk): exit("error: %s already exists" % (outputSignedApk)) | |
xmldoc = xml.dom.minidom.parse(configXml) | |
xhdpiFilter = lambda x: ('gap:platform' in x.attributes.keys() and x.attributes['gap:platform'].value == 'android' and 'gap:density' in x.attributes.keys() and x.attributes['gap:density'].value == 'xhdpi') | |
iconfile = filter(xhdpiFilter, xmldoc.getElementsByTagName('icon'))[0].attributes['src'].value | |
splashfile = filter(xhdpiFilter, xmldoc.getElementsByTagName('gap:splash'))[0].attributes['src'].value | |
tmpdir = tempfile.mkdtemp() | |
os.system('apktool decode --force %s %s' % (inputApk, tmpdir)) | |
shutil.copyfile(os.path.join(os.path.dirname(configXml), iconfile),os.path.join(tmpdir, 'res/drawable-xhdpi/icon.png')) | |
shutil.copyfile(os.path.join(os.path.dirname(configXml), splashfile),os.path.join(tmpdir, 'res/drawable-xhdpi/splash.png')) | |
os.system('apktool build %s %s' % (tmpdir,outputApk)) | |
os.system('jarsigner -verbose -keystore %s/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg MD5withRSA -sigfile CERT -signedjar %s %s androiddebugkey' % (os.path.expanduser('~'),outputSignedApk, outputApk)) | |
print "Built %s and %s" % (outputApk, outputSignedApk) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment