1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2016 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 java.util.Base64; 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker import testing.*; 20*795d594fSAndroid Build Coastguard Worker import art.Redefinition; 21*795d594fSAndroid Build Coastguard Worker 22*795d594fSAndroid Build Coastguard Worker public class Main { 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker /** 25*795d594fSAndroid Build Coastguard Worker * base64 encoded class/dex file for 26*795d594fSAndroid Build Coastguard Worker * package testing; 27*795d594fSAndroid Build Coastguard Worker * class Transform { 28*795d594fSAndroid Build Coastguard Worker * public void sayHi() { 29*795d594fSAndroid Build Coastguard Worker * System.out.println("Goodbye"); 30*795d594fSAndroid Build Coastguard Worker * } 31*795d594fSAndroid Build Coastguard Worker * } 32*795d594fSAndroid Build Coastguard Worker */ 33*795d594fSAndroid Build Coastguard Worker private static final byte[] CLASS_BYTES = Base64.getDecoder().decode( 34*795d594fSAndroid Build Coastguard Worker "yv66vgAAADQAHAoABgAOCQAPABAIABEKABIAEwcAFAcAFQEABjxpbml0PgEAAygpVgEABENvZGUB" + 35*795d594fSAndroid Build Coastguard Worker "AA9MaW5lTnVtYmVyVGFibGUBAAVzYXlIaQEAClNvdXJjZUZpbGUBAA5UcmFuc2Zvcm0uamF2YQwA" + 36*795d594fSAndroid Build Coastguard Worker "BwAIBwAWDAAXABgBAAdHb29kYnllBwAZDAAaABsBABF0ZXN0aW5nL1RyYW5zZm9ybQEAEGphdmEv" + 37*795d594fSAndroid Build Coastguard Worker "bGFuZy9PYmplY3QBABBqYXZhL2xhbmcvU3lzdGVtAQADb3V0AQAVTGphdmEvaW8vUHJpbnRTdHJl" + 38*795d594fSAndroid Build Coastguard Worker "YW07AQATamF2YS9pby9QcmludFN0cmVhbQEAB3ByaW50bG4BABUoTGphdmEvbGFuZy9TdHJpbmc7" + 39*795d594fSAndroid Build Coastguard Worker "KVYAIQAFAAYAAAAAAAIAAQAHAAgAAQAJAAAAHQABAAEAAAAFKrcAAbEAAAABAAoAAAAGAAEAAAAC" + 40*795d594fSAndroid Build Coastguard Worker "AAEACwAIAAEACQAAACUAAgABAAAACbIAAhIDtgAEsQAAAAEACgAAAAoAAgAAAAQACAAFAAEADAAA" + 41*795d594fSAndroid Build Coastguard Worker "AAIADQ=="); 42*795d594fSAndroid Build Coastguard Worker private static final byte[] DEX_BYTES = Base64.getDecoder().decode( 43*795d594fSAndroid Build Coastguard Worker "ZGV4CjAzNQBhYIi3Gs9Nn/GN1fCzF+aFQ0AbhA1h1WHUAgAAcAAAAHhWNBIAAAAAAAAAADQCAAAO" + 44*795d594fSAndroid Build Coastguard Worker "AAAAcAAAAAYAAACoAAAAAgAAAMAAAAABAAAA2AAAAAQAAADgAAAAAQAAAAABAAC0AQAAIAEAAGIB" + 45*795d594fSAndroid Build Coastguard Worker "AABqAQAAcwEAAIoBAACeAQAAsgEAAMYBAADbAQAA6wEAAO4BAADyAQAABgIAAAsCAAAUAgAAAgAA" + 46*795d594fSAndroid Build Coastguard Worker "AAMAAAAEAAAABQAAAAYAAAAIAAAACAAAAAUAAAAAAAAACQAAAAUAAABcAQAAAwAAAAsAAAAAAAEA" + 47*795d594fSAndroid Build Coastguard Worker "DAAAAAEAAAAAAAAABAAAAAAAAAAEAAAADQAAAAQAAAABAAAAAQAAAAAAAAAHAAAAAAAAACYCAAAA" + 48*795d594fSAndroid Build Coastguard Worker "AAAAAQABAAEAAAAbAgAABAAAAHAQAQAAAA4AAwABAAIAAAAgAgAACQAAAGIAAAAbAQEAAABuIAAA" + 49*795d594fSAndroid Build Coastguard Worker "EAAOAAAAAQAAAAIABjxpbml0PgAHR29vZGJ5ZQAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABJMamF2" + 50*795d594fSAndroid Build Coastguard Worker "YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwASTGphdmEvbGFuZy9TeXN0ZW07ABNM" + 51*795d594fSAndroid Build Coastguard Worker "dGVzdGluZy9UcmFuc2Zvcm07AA5UcmFuc2Zvcm0uamF2YQABVgACVkwAEmVtaXR0ZXI6IGphY2st" + 52*795d594fSAndroid Build Coastguard Worker "NC4yMgADb3V0AAdwcmludGxuAAVzYXlIaQACAAcOAAQABw6HAAAAAQECgYAEoAIDAbgCDQAAAAAA" + 53*795d594fSAndroid Build Coastguard Worker "AAABAAAAAAAAAAEAAAAOAAAAcAAAAAIAAAAGAAAAqAAAAAMAAAACAAAAwAAAAAQAAAABAAAA2AAA" + 54*795d594fSAndroid Build Coastguard Worker "AAUAAAAEAAAA4AAAAAYAAAABAAAAAAEAAAEgAAACAAAAIAEAAAEQAAABAAAAXAEAAAIgAAAOAAAA" + 55*795d594fSAndroid Build Coastguard Worker "YgEAAAMgAAACAAAAGwIAAAAgAAABAAAAJgIAAAAQAAABAAAANAIAAA=="); 56*795d594fSAndroid Build Coastguard Worker main(String[] args)57*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 58*795d594fSAndroid Build Coastguard Worker doTest(new Transform()); 59*795d594fSAndroid Build Coastguard Worker } 60*795d594fSAndroid Build Coastguard Worker doTest(Transform t)61*795d594fSAndroid Build Coastguard Worker public static void doTest(Transform t) { 62*795d594fSAndroid Build Coastguard Worker t.sayHi(); 63*795d594fSAndroid Build Coastguard Worker Redefinition.addCommonTransformationResult("testing/Transform", CLASS_BYTES, DEX_BYTES); 64*795d594fSAndroid Build Coastguard Worker Redefinition.enableCommonRetransformation(true); 65*795d594fSAndroid Build Coastguard Worker Redefinition.doCommonClassRetransformation(Transform.class); 66*795d594fSAndroid Build Coastguard Worker t.sayHi(); 67*795d594fSAndroid Build Coastguard Worker } 68*795d594fSAndroid Build Coastguard Worker } 69