/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.spartacusrex.spartacuside.external;
import com.spartacusrex.spartacuside.external.dexloader.dexclassloader;
import dalvik.system.DexClassLoader;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Spartacus Rex
*/
public class java {
public static void usage(){
System.out.println("Usage : java -v -jar [List of Jar files] CLASSNAME");
}
public static void main(String[] zArgs){
try{
String dexfolder = null;
String jarfile = "";
String classname = "";
boolean verbose=false;
//Cycle through the args
int pargspos =-1;
int argnum = zArgs.length;
for(int i=0;i<argnum;i++){
if(zArgs[i].equals("-jar")){
//Its the JAR file
if(i<argnum-1){
i++;
jarfile = zArgs[i];
}else{
//Wrong Varibles
throw new InvokeException("Wrong parameters. No JAR file specified.");
}
}else if(zArgs[i].equals("-v") || zArgs[i].equals("-verbose")){
//Property set
verbose = true;
}else{
//it's the class
classname = zArgs[i];
//The rest are the variables to pass on..
if(i<argnum-1){
//Pass em on..
pargspos = i+1;
}
break;
}
}
if(jarfile.equals("")){
throw new InvokeException("No JAR Files specified");
}
//Environment Variables..
dexfolder = System.getenv("ODEX_FOLDER");
if(dexfolder==null || dexfolder.equals("")){
//Try the TEMP Folder
//System.out.println("No ODEX_FOLDER environment variable specified. Using TEMP");
dexfolder = System.getenv("TEMP");
if(dexfolder==null || dexfolder.equals("")){
System.out.println("No TEMP OR ODEX_FOLDER specified!");
throw new InvokeException("Please specify ODEX_FOLDER or TEMP environment variable");
}
}
//Output INFO
if(verbose){
System.out.println("ODEX_FOLDER : "+dexfolder);
System.out.println("JAR/DEX FILE : "+jarfile);
System.out.println("CLASSNAME : "+classname);
}
//Check wee have the info we need..
if(jarfile.equals("") || classname.equals("")){
throw new InvokeException("Incorrect parameters");
}
//Now load this class..
//DexClassLoader loader = new DexClassLoader(jarfile, dexfolder, null, ClassLoader.getSystemClassLoader());
dexclassloader loader = new dexclassloader(jarfile, dexfolder, null, ClassLoader.getSystemClassLoader(),verbose);
Class loadedclass = loader.loadClass(classname);
//Now sort the command line inputs
String[] mainargs = null;
if(pargspos != -1){
int args = argnum - pargspos;
mainargs = new String[args];
for(int i=0;i<args;i++){
mainargs[i] = zArgs[pargspos+i];
}
}else{
mainargs = new String[0];
}
//Gat public static void main
Class[] ptypes = new Class[]{mainargs.getClass()};
Method main = loadedclass.getDeclaredMethod("main", ptypes);
//String[] pargs = new String[mainargs.length - 1];
//System.arraycopy(mainargs, 1, pargs, 0, pargs.length);
//Invoke main method..
if(verbose){
System.out.println("Main parameters : "+mainargs.length+" parameters");
for(String par : mainargs){
System.out.println("Param : "+par);
}
}
// main.invoke(null, new Object[]{pargs});
main.invoke(null, new Object[]{mainargs});
} catch (Exception ex) {
ex.printStackTrace();
usage();
//Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} /*catch (IllegalAccessException ex) { s//Err..
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} catch (IllegalArgumentException ex) {
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoSuchMethodException ex) {
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} catch (SecurityException ex) {
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
} catch (ClassNotFoundException ex) {
Logger.getLogger(java.class.getName()).log(Level.SEVERE, null, ex);
}*/
}
}