waflib: android: implement appending native libraries, make dependency graph cleaner
This commit is contained in:
parent
5ec762b69c
commit
c9716b87be
1 changed files with 68 additions and 42 deletions
|
@ -84,8 +84,8 @@ class aapt2compile(javaw.JTask):
|
|||
|
||||
class aapt2link(javaw.JTask):
|
||||
color = 'GREEN' # android green :)
|
||||
run_str = '${AAPT2} link -v --allow-reserved-package-id -o ${OUTAPK} -A ${ASSETSDIR} --manifest ${MANIFEST} --java ${OUTRDIR} -I ${CLASSPATH_ANDROID} ${SRC}'
|
||||
vars = ['AAPT2', 'OUTAPK', 'ASSETSDIR', 'MANIFEST', 'OUTRDIR', 'CLASSPATH_ANDROID']
|
||||
run_str = '${AAPT2} link -v --allow-reserved-package-id -o ${OUTAPK_UNALIGNED_NOCLASSES_NOJNI} -A ${ASSETSDIR} --manifest ${MANIFEST} --java ${OUTRDIR} -I ${CLASSPATH_ANDROID} ${SRC}'
|
||||
vars = ['AAPT2', 'OUTAPK_UNALIGNED_NOCLASSES_NOJNI', 'ASSETSDIR', 'MANIFEST', 'OUTRDIR', 'CLASSPATH_ANDROID']
|
||||
|
||||
def runnable_status(self):
|
||||
"""
|
||||
|
@ -100,15 +100,14 @@ class aapt2link(javaw.JTask):
|
|||
resdir = root.make_node(self.env.RESOUTFILE)
|
||||
self.inputs = resdir.ant_glob('**/*.flat', quiet=True)
|
||||
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK) ]
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK_UNALIGNED_NOCLASSES_NOJNI) ]
|
||||
|
||||
return super(aapt2link, self).runnable_status()
|
||||
|
||||
|
||||
class d8(javaw.JTask):
|
||||
color = 'GREEN' # android green :)
|
||||
run_str = '${D8} ${SRC} ${D8_FLAGS} --output ${OUTDIR} --lib ${CLASSPATH_ANDROID} ${D8_CLASSPATH}'
|
||||
vars = ['D8', 'D8_FLAGS', 'OUTAPK', 'CLASSPATH_ANDROID', 'D8_CLASSPATH']
|
||||
vars = ['D8', 'D8_FLAGS', 'OUTDIR', 'CLASSPATH_ANDROID', 'D8_CLASSPATH' ]
|
||||
|
||||
def runnable_status(self):
|
||||
"""
|
||||
|
@ -136,10 +135,10 @@ def custom_runnable_status(self):
|
|||
self.srcdir.append(outrdir)
|
||||
return self.old_runnable_status()
|
||||
|
||||
class apkdex(Task.Task):
|
||||
color = 'GREEN' # android green :)
|
||||
run_str = '${ZIP} -uj ${OUTAPK} ${OUTDIR}/classes.dex'
|
||||
vars = ['ZIP', 'OUTAPK', 'OUTDIR']
|
||||
class apkjni(Task.Task):
|
||||
color = 'BLUE'
|
||||
run_str = '${ZIP} ${OUTAPK_UNALIGNED_NOCLASSES_NOJNI} --out ${OUTAPK_UNALIGNED_NOCLASSES} && ${ZIP} -ru ${OUTAPK_UNALIGNED_NOCLASSES} ${JNIDIR}'
|
||||
vars = ['ZIP', 'JNIDIR', 'OUTAPK_UNALIGNED_NOCLASSES_NOJNI', 'OUTAPK_UNALIGNED_NOCLASSES']
|
||||
|
||||
def runnable_status(self):
|
||||
"""
|
||||
|
@ -149,17 +148,34 @@ class apkdex(Task.Task):
|
|||
if not t.hasrun:
|
||||
return Task.ASK_LATER
|
||||
|
||||
self.inputs = [
|
||||
self.generator.outdir.make_node('classes.dex'),
|
||||
self.generator.outdir.make_node(self.env.OUTAPK)
|
||||
]
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK) ]
|
||||
# I could use SRC here, but I need to track changes of OUTAPK_UNALIGNED_NOCLASSES_NOJNI also
|
||||
self.inputs = self.generator.outdir.ant_glob('{0}/**/*'.format(self.env.JNIDIR), quiet=True)
|
||||
self.inputs += self.generator.outdir.ant_glob(self.env.OUTAPK_UNALIGNED_NOCLASSES_NOJNI)
|
||||
self.outputs = [self.generator.outdir.make_node(self.env.OUTAPK_UNALIGNED_NOCLASSES)]
|
||||
|
||||
return super(apkjni, self).runnable_status()
|
||||
|
||||
class apkdex(Task.Task):
|
||||
color = 'GREEN' # android green :)
|
||||
run_str = '${ZIP} ${OUTAPK_UNALIGNED_NOCLASSES} --out ${OUTAPK_UNALIGNED} && ${ZIP} -uj ${OUTAPK_UNALIGNED} classes.dex'
|
||||
vars = ['ZIP', 'OUTAPK_UNALIGNED_NOCLASSES', 'OUTAPK_UNALIGNED']
|
||||
|
||||
def runnable_status(self):
|
||||
"""
|
||||
Waits for dependent tasks to be complete, then read the file system to find the input nodes.
|
||||
"""
|
||||
for t in self.run_after:
|
||||
if not t.hasrun:
|
||||
return Task.ASK_LATER
|
||||
|
||||
self.inputs = [self.generator.outdir.make_node('classes.dex'), self.generator.outdir.make_node(self.env.OUTAPK_UNALIGNED_NOCLASSES)]
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK_UNALIGNED) ]
|
||||
return super(apkdex, self).runnable_status()
|
||||
|
||||
class apkalign(Task.Task):
|
||||
color = 'GREEN' # android green :)
|
||||
run_str = '${ZIPALIGN} -f -v 4 ${OUTAPK} ${OUTAPK_ALIGNED}'
|
||||
vars = ['ZIPALIGN', 'OUTAPK', 'OUTAPK_ALIGNED']
|
||||
run_str = '${ZIPALIGN} -f -v 4 ${OUTAPK_UNALIGNED} ${OUTAPK}'
|
||||
vars = ['ZIPALIGN', 'OUTAPK_UNALIGNED', 'OUTAPK']
|
||||
|
||||
def runnable_status(self):
|
||||
"""
|
||||
|
@ -169,8 +185,8 @@ class apkalign(Task.Task):
|
|||
if not t.hasrun:
|
||||
return Task.ASK_LATER
|
||||
|
||||
self.inputs = [ self.generator.outdir.make_node(self.env.OUTAPK) ]
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK_ALIGNED) ]
|
||||
self.inputs = [ self.generator.outdir.make_node(self.env.OUTAPK_UNALIGNED) ]
|
||||
self.outputs = [ self.generator.outdir.make_node(self.env.OUTAPK) ]
|
||||
return super(apkalign, self).runnable_status()
|
||||
|
||||
|
||||
|
@ -199,14 +215,20 @@ def apply_aapt(self):
|
|||
self.env.ASSETSDIR = os.path.join(srcdir.abspath(), getattr(self, 'assetsdir', 'assets'))
|
||||
self.env.MANIFEST = os.path.join(srcdir.abspath(), getattr(self, 'manifest', 'AndroidManifest.xml'))
|
||||
|
||||
self.env.OUTAPK = getattr(self, 'apkname', self.name) + '.unaligned.apk'
|
||||
self.env.OUTAPK_ALIGNED = getattr(self, 'apkname', self.name) + '.apk'
|
||||
apkname = getattr(self, 'apkname', self.name)
|
||||
self.env.OUTAPK_UNALIGNED_NOCLASSES_NOJNI = apkname + '.unaligned.noclasses.nojni.apk'
|
||||
self.env.OUTAPK_UNALIGNED_NOCLASSES = apkname + '.unaligned.noclasses.apk'
|
||||
self.env.OUTAPK_UNALIGNED = apkname + '.unaligned.apk'
|
||||
self.env.OUTAPK = apkname + '.apk'
|
||||
|
||||
self.env.OUTRDIR = os.path.join(outdir.abspath(), getattr(self, 'gendir', 'gen')) # build/gen
|
||||
self.env.RESOUTFILE = os.path.join(outdir.abspath(), 'compiled')
|
||||
self.env.OUTDIR = outdir.abspath()
|
||||
self.env.TARGET_API = getattr(self, 'target_api', 10) # Android 2.3.3 TODO: parse AndroidManifest.xml to get target API!
|
||||
self.env.CLASSPATH_ANDROID = os.path.join(sdk, 'platforms', 'android-' + str(self.env.TARGET_API), 'android.jar')
|
||||
|
||||
self.env.JNIDIR = getattr(self, 'jni', 'lib')
|
||||
|
||||
self.aapt2compile_task = self.create_task('aapt2compile')
|
||||
self.aapt2compile_task.cwd = outdir
|
||||
|
||||
|
@ -227,9 +249,13 @@ def apply_d8(self):
|
|||
self.d8_task.cwd = self.outdir
|
||||
self.d8_task.set_run_after(self.javac_task)
|
||||
|
||||
self.apkjni_task = self.create_task('apkjni')
|
||||
self.apkjni_task.cwd = self.outdir
|
||||
self.apkjni_task.set_run_after(self.d8_task)
|
||||
|
||||
self.apkdex_task = self.create_task('apkdex')
|
||||
self.apkdex_task.cwd = self.outdir
|
||||
self.apkdex_task.set_run_after(self.d8_task)
|
||||
self.apkdex_task.set_run_after(self.apkjni_task)
|
||||
|
||||
self.apkalign_task = self.create_task('apkalign')
|
||||
self.apkalign_task.cwd = self.outdir
|
||||
|
|
Loading…
Add table
Reference in a new issue