package Ġcom . d ail ym otion . k int a . integration . android Ċ Ċ import Ġcom . d ail ym otion . k int a . K int a Env Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ @ Suppress (" NAME _ SH ADO WING ") Ċ object ĠAndroid Integration Ġ{ ĊĠĠĠ Ġfun Ġsign A pk ( ĊĠĠĠĠĠĠĠ Ġinput : ĠFile , ĊĠĠĠĠĠĠĠ Ġoutput : ĠFile , ĊĠĠĠĠĠĠĠ Ġkeystore : ĠFile ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkeystore Password : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkey Alias : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġkey Password : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile . create TempFile (" keystore ", Ġnull ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeystore Ġ= Ġkeystore Ġ?: Ġlet Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Ġ= ĠK int a Env . get ( K int a Env . Var . K INT A _ KEY STORE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . write Bytes ( Base 6 4 . get Decoder (). decode ( base 6 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeystore Password Ġ= Ġkeystore Password Ġ?: ĠK int a Env . get ( K int a Env . Var . K INT A _ KEY STORE _ PASSWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Alias Ġ= Ġkey Alias Ġ?: ĠK int a Env . get ( K int a Env . Var . K INT A _ KEY _ ALIAS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Password Ġ= Ġkey Password Ġ?: ĠK int a Env . get ( K int a Env . Var . K INT A _ KEY _ PASSWORD ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcode Ġ= ĠProcess Builder (" which ", Ġ" apk signer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Output ( Process Builder . Redirect . IN HER IT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Error ( Process Builder . Redirect . IN HER IT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. waitFor () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapk signer Command Ġ= Ġif Ġ( code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" apk signer " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid Home Ġ= ĠSystem . getenv (" ANDROID _ HOME ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( android Home Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" make Ġsure Ġapk signer Ġis Ġin Ġyour Ġpath Ġor Ġthat Ġ\$ ANDROID _ HOME Ġis Ġset " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommand Ġ= ĠFile ( android Home ). walk Top Down (). first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġ" apk signer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. absolute Path ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ( command Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġfind Ġapk signer Ġin Ġ$ android Home " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" found Ġapk signer Ġat Ġ$ apk signer Command ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= ĠProcess Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk signer Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sign ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- ks ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeystore . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- ks - pass ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pass :$ keystore Password ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- ks - key - alias ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Alias , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- key - pass ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" pass :$ key Password ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"-- out ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Output ( Process Builder . Redirect . IN HER IT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. redirect Error ( Process Builder . Redirect . IN HER IT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. waitFor () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( code Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Cannot Ġsign Ġapk " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . delete () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }