!752 import android.os.*; import android.widget.*; import android.app.*; static S snippetToRun = "#1004078", snippetArg = "alarm"; static Class x30; public static void main(final Service service) { androidContext = service; androidLifecycle("#1004186 toasting"); pcall { androidToast("JavaX starting awareness."); } new Thread() { public void run() { try { androidLifecycle("#1004186 threading"); String[] a = { snippetToRun, snippetArg }; callx30(a); } catch e { androidLifecycle(e); } } }.start(); } static void callx30(S[] args) { getx30(); androidLifecycle("#1004186 calling x30 " + join(" ", args)); pcall { callMain(x30, args); androidLifecycle("x30 done"); } } static synchronized void getx30() { if (x30 == null) { O dataStore = null; pcall { dataStore = Class.forName("de.tinybrain.javax_allperms.DataStore"); } if (dataStore != null) x30 = (Class) call(dataStore, "get", "x30"); if (x30 == null) { androidLifecycle("#1004186 loading x30"); x30 = loadx30("#1004182"); callOpt(dataStore, "put", "x30", x30); } } } static Class loadx30(String programID) ctex { S url = "http://tinybrain.de:8080/dexcompile.php?id=" + parseSnippetID(programID); byte[] dexData = loadBinaryPage(url); if (!isDex(dexData)) throw new RuntimeException("Dex generation error"); androidLifecycle("Dex loaded: " + dexData.length + "b"); File dexDir = makeAndroidTempDir(); File dexFile = new File(dexDir, System.currentTimeMillis() + ".dex"); File dexOutputDir = makeAndroidTempDir(); try { saveBinaryFile(dexFile.getPath(), dexData); } catch (Throwable e) { System.out.println("Whoa!"); throw new RuntimeException(e); } System.out.println("Getting parent class loader."); ClassLoader parentClassLoader = main.class.getClassLoader().getParent(); //System.out.println("Making DexClassLoader."); //DexClassLoader classLoader = new DexClassLoader(dexFile.getAbsolutePath(), dexOutputDir.getAbsolutePath(), null, // parentClassLoader); Class dcl = Class.forName("dalvik.system.DexClassLoader"); Object classLoader = dcl.getConstructors()[0].newInstance(dexFile.getAbsolutePath(), dexOutputDir.getAbsolutePath(), null, parentClassLoader); androidLifecycle("Loading main class."); Class theClass = (Class) call(classLoader, "loadClass", "x30"); androidLifecycle("Main class loaded."); try { set(theClass, "androidContext", androidContext); } catch (Throwable e) {} setVars(theClass, programID); hotwire_copyOver(theClass); return theClass; } static void setVars(Class theClass, String programID) { try { set(theClass, "programID", programID); } catch (Throwable e) {} try { set(theClass, "__javax", x30); } catch (Throwable e) {} }