litert-models / android /prepare_runtime_check.py
Charlbi's picture
Complete FireViewer Android learning SDK, source and verification records
dee7f43 verified
Raw History Blame Contribute Delete
2.17 kB
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')