import pathlib,zipfile,subprocess,os,urllib.request root=pathlib.Path(__file__).resolve().parent cache=pathlib.Path(os.environ.get('GRADLE_USER_HOME','/workspace/cache/gradle'))/'caches/modules-2/files-2.1' java=pathlib.Path(os.environ.get('JAVA_HOME','/workspace/toolchains/jdk-21')) android=pathlib.Path(os.environ.get('ANDROID_SDK_ROOT','/workspace/toolchains/android-sdk')) kotlin=pathlib.Path(os.environ.get('KOTLIN_HOME','/workspace/toolchains/kotlin-2.2.10')) abi=os.environ.get('VDS_ANDROID_ABI','x86_64') env={**os.environ,'JAVA_HOME':str(java),'PATH':str(java/'bin')+':'+os.environ['PATH']} jars=[] dependencies=[('org.tensorflow','tensorflow-lite','2.16.1'),('org.tensorflow','tensorflow-lite-api','2.16.1'),('org.tensorflow','tensorflow-lite-select-tf-ops','2.16.1')] for group,name,version in dependencies: matches=list((cache/group/name/version).glob('*/*.aar')) aar=matches[0] if matches else root/(name+'-'+version+'.aar') if not aar.exists():urllib.request.urlretrieve(f'https://repo.maven.apache.org/maven2/{group.replace(".","/")}/{name}/{version}/{name}-{version}.aar',aar) with zipfile.ZipFile(aar) as z: jar=root/(name+'.jar');jar.write_bytes(z.read('classes.jar'));jars.append(str(jar)) for item in z.namelist(): if item.startswith('jni/'+abi+'/') and item.endswith('.so'): lib=root/'lib'/pathlib.Path(item).name;lib.parent.mkdir(exist_ok=True);lib.write_bytes(z.read(item)) classes=root/'classes';classes.mkdir(exist_ok=True) sdk=root/'on-device-learning.jar' subprocess.run([str(kotlin/'bin/kotlinc'),*[str(p) for p in root.glob('*.kt')],'-cp',':'.join([str(android/'platforms/android-36/android.jar'),*jars]),'-d',str(sdk)],check=True,env=env) jars.extend([str(sdk),str(kotlin/'lib/kotlin-stdlib.jar')]) subprocess.run([str(java/'bin/javac'),'-source','11','-target','11','-cp',':'.join(jars),'-d',str(classes),*[str(p) for p in root.glob('*.java')]],check=True,env=env) subprocess.run([str(android/'build-tools/36.0.0/d8'),'--min-api','28','--output',str(root/'training-check.jar'),*[str(p) for p in classes.glob('*.class')],*jars],check=True,env=env) print(root/'training-check.jar')