1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2011 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker import dalvik.system.PathClassLoader; 18*795d594fSAndroid Build Coastguard Worker import dalvik.system.VMDebug; 19*795d594fSAndroid Build Coastguard Worker import java.io.BufferedInputStream; 20*795d594fSAndroid Build Coastguard Worker import java.io.BufferedOutputStream; 21*795d594fSAndroid Build Coastguard Worker import java.io.FileInputStream; 22*795d594fSAndroid Build Coastguard Worker import java.io.FileOutputStream; 23*795d594fSAndroid Build Coastguard Worker import java.io.File; 24*795d594fSAndroid Build Coastguard Worker import java.io.IOException; 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker public class Main { main(String[] args)27*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) throws Exception { 28*795d594fSAndroid Build Coastguard Worker System.loadLibrary(args[0]); 29*795d594fSAndroid Build Coastguard Worker System.out.println("Hello, world!"); 30*795d594fSAndroid Build Coastguard Worker String agent = null; 31*795d594fSAndroid Build Coastguard Worker // By default allow debugging 32*795d594fSAndroid Build Coastguard Worker boolean debugging_allowed = true; 33*795d594fSAndroid Build Coastguard Worker for(String a : args) { 34*795d594fSAndroid Build Coastguard Worker if(a.startsWith("agent:")) { 35*795d594fSAndroid Build Coastguard Worker agent = a.substring(6); 36*795d594fSAndroid Build Coastguard Worker } else if (a.equals("disallow-debugging")) { 37*795d594fSAndroid Build Coastguard Worker debugging_allowed = false; 38*795d594fSAndroid Build Coastguard Worker } 39*795d594fSAndroid Build Coastguard Worker } 40*795d594fSAndroid Build Coastguard Worker if (agent == null) { 41*795d594fSAndroid Build Coastguard Worker throw new Error("Could not find agent: argument!"); 42*795d594fSAndroid Build Coastguard Worker } 43*795d594fSAndroid Build Coastguard Worker setDebuggingAllowed(debugging_allowed); 44*795d594fSAndroid Build Coastguard Worker // Setup is finished. Try to attach agent in 2 ways. 45*795d594fSAndroid Build Coastguard Worker try { 46*795d594fSAndroid Build Coastguard Worker VMDebug.attachAgent(agent, null); 47*795d594fSAndroid Build Coastguard Worker } catch(SecurityException e) { 48*795d594fSAndroid Build Coastguard Worker System.out.println(e.getMessage()); 49*795d594fSAndroid Build Coastguard Worker } 50*795d594fSAndroid Build Coastguard Worker attachWithClassLoader(args); 51*795d594fSAndroid Build Coastguard Worker System.out.println("Goodbye!"); 52*795d594fSAndroid Build Coastguard Worker } 53*795d594fSAndroid Build Coastguard Worker setDebuggingAllowed(boolean val)54*795d594fSAndroid Build Coastguard Worker private static native void setDebuggingAllowed(boolean val); 55*795d594fSAndroid Build Coastguard Worker attachWithClassLoader(String[] args)56*795d594fSAndroid Build Coastguard Worker private static void attachWithClassLoader(String[] args) throws Exception { 57*795d594fSAndroid Build Coastguard Worker for(String a : args) { 58*795d594fSAndroid Build Coastguard Worker if(a.startsWith("agent:")) { 59*795d594fSAndroid Build Coastguard Worker try { 60*795d594fSAndroid Build Coastguard Worker VMDebug.attachAgent(a.substring(6), Main.class.getClassLoader()); 61*795d594fSAndroid Build Coastguard Worker } catch(SecurityException e) { 62*795d594fSAndroid Build Coastguard Worker System.out.println(e.getMessage()); 63*795d594fSAndroid Build Coastguard Worker } catch (Exception e) { 64*795d594fSAndroid Build Coastguard Worker e.printStackTrace(System.out); 65*795d594fSAndroid Build Coastguard Worker } 66*795d594fSAndroid Build Coastguard Worker } 67*795d594fSAndroid Build Coastguard Worker } 68*795d594fSAndroid Build Coastguard Worker } 69*795d594fSAndroid Build Coastguard Worker } 70