package Ġcn . ka icity . common . platform Ċ Ċ import Ġkotlinx . coroutines . flow . Flow Collector Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ actual Ġclass ĠI Ob fusc ator Ġactual Ġconstructor ( private Ġvar Ġflow : ĠFlow Collector < String >) Ġ{ ĊĊĠĠĠ Ġactual Ġsuspend Ġfun Ġdo Ob fusc ator ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġos Ġ= ĠSystem . getProperty (" os . name "). lowercase () ĊĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= Ġargs . join ToString (" Ġ") ĊĊĠĠĠĠĠĠĠ Ġval Ġraw Path Ġ= Ġ" dex - tools / black - ob fusc ator " ĊĠĠĠĠĠĠĠ Ġval Ġabsolute Path Ġ= ĠFile ( raw Path ). absolute Path ĊĊĠĠĠĠĠĠĠ Ġval Ġshell Ġ= Ġif Ġ( os . contains (" windows ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ absolute Path . bat Ġd 2 j - black - ob fusc ator Ġ$ param Ġ\ n " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ absolute Path . sh Ġd 2 j - black - ob fusc ator Ġ$ param Ġ\ n " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec ( shell ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= ĠBufferedReader ( InputStream Reader ( process . inputStream , ĠCharset . forName (" GB K "))) ĊĠĠĠĠĠĠĠ Ġoutput . use Lines Ġ{ Ġsequence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow . emit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠBufferedReader ( InputStream Reader ( process . error Stream , ĠCharset . forName (" GB K "))) ĊĠĠĠĠĠĠĠ Ġerror . use Lines Ġ{ Ġsequence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow . emit ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } ĊĊ