1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2017 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 class Verification { 20*795d594fSAndroid Build Coastguard Worker // Jasmin program: 21*795d594fSAndroid Build Coastguard Worker // 22*795d594fSAndroid Build Coastguard Worker // .source Transform.java 23*795d594fSAndroid Build Coastguard Worker // .class Transform 24*795d594fSAndroid Build Coastguard Worker // .super java/lang/Object 25*795d594fSAndroid Build Coastguard Worker // .method <init>()V 26*795d594fSAndroid Build Coastguard Worker // .limit stack 1 27*795d594fSAndroid Build Coastguard Worker // .limit locals 1 28*795d594fSAndroid Build Coastguard Worker // aload_0 29*795d594fSAndroid Build Coastguard Worker // invokespecial java/lang/Object/<init>()V 30*795d594fSAndroid Build Coastguard Worker // return 31*795d594fSAndroid Build Coastguard Worker // .end method 32*795d594fSAndroid Build Coastguard Worker // .method sayHi(Ljava/lang/String;)V 33*795d594fSAndroid Build Coastguard Worker // .limit stack 1 34*795d594fSAndroid Build Coastguard Worker // .limit locals 2 35*795d594fSAndroid Build Coastguard Worker // aload_1 36*795d594fSAndroid Build Coastguard Worker // areturn 37*795d594fSAndroid Build Coastguard Worker // .end method 38*795d594fSAndroid Build Coastguard Worker private static final byte[] CLASS_BYTES = Base64.getDecoder().decode( 39*795d594fSAndroid Build Coastguard Worker "yv66vgADAC0ADgoADQAHBwAIAQAQamF2YS9sYW5nL09iamVjdAEAClNvdXJjZUZpbGUBAAY8aW5p" + 40*795d594fSAndroid Build Coastguard Worker "dD4BAAVzYXlIaQwABQAKAQAJVHJhbnNmb3JtAQAEQ29kZQEAAygpVgEADlRyYW5zZm9ybS5qYXZh" + 41*795d594fSAndroid Build Coastguard Worker "AQAVKExqYXZhL2xhbmcvU3RyaW5nOylWBwADACAAAgANAAAAAAACAAAABQAKAAEACQAAABEAAQAB" + 42*795d594fSAndroid Build Coastguard Worker "AAAABSq3AAGxAAAAAAABAAYADAABAAkAAAAOAAEAAgAAAAIrsAAAAAAAAQAEAAAAAgAL"); 43*795d594fSAndroid Build Coastguard Worker 44*795d594fSAndroid Build Coastguard Worker // Smali program: 45*795d594fSAndroid Build Coastguard Worker // 46*795d594fSAndroid Build Coastguard Worker // .class LTransform; 47*795d594fSAndroid Build Coastguard Worker // .super Ljava/lang/Object; 48*795d594fSAndroid Build Coastguard Worker // .source "Transform.java" 49*795d594fSAndroid Build Coastguard Worker // # direct methods 50*795d594fSAndroid Build Coastguard Worker // .method constructor <init>()V 51*795d594fSAndroid Build Coastguard Worker // .registers 1 52*795d594fSAndroid Build Coastguard Worker // invoke-direct {p0}, Ljava/lang/Object;-><init>()V 53*795d594fSAndroid Build Coastguard Worker // return-void 54*795d594fSAndroid Build Coastguard Worker // .end method 55*795d594fSAndroid Build Coastguard Worker // # virtual methods 56*795d594fSAndroid Build Coastguard Worker // .method public sayHi(Ljava/lang/String;)V 57*795d594fSAndroid Build Coastguard Worker // .registers 2 58*795d594fSAndroid Build Coastguard Worker // return-object p1 59*795d594fSAndroid Build Coastguard Worker // .end method 60*795d594fSAndroid Build Coastguard Worker private static final byte[] DEX_BYTES = Base64.getDecoder().decode( 61*795d594fSAndroid Build Coastguard Worker "ZGV4CjAzNQClOAc4ZDMXaHMezhYcqZxcjUeVCWRYUkooAgAAcAAAAHhWNBIAAAAAAAAAAJQBAAAI" + 62*795d594fSAndroid Build Coastguard Worker "AAAAcAAAAAQAAACQAAAAAgAAAKAAAAAAAAAAAAAAAAMAAAC4AAAAAQAAANAAAAA4AQAA8AAAAPAA" + 63*795d594fSAndroid Build Coastguard Worker "AAD4AAAABQEAABkBAAAtAQAAPQEAAEABAABEAQAAAQAAAAIAAAADAAAABQAAAAUAAAADAAAAAAAA" + 64*795d594fSAndroid Build Coastguard Worker "AAYAAAADAAAATAEAAAAAAAAAAAAAAAABAAcAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAEAAAA" + 65*795d594fSAndroid Build Coastguard Worker "AAAAAIYBAAAAAAAABjxpbml0PgALTFRyYW5zZm9ybTsAEkxqYXZhL2xhbmcvT2JqZWN0OwASTGph" + 66*795d594fSAndroid Build Coastguard Worker "dmEvbGFuZy9TdHJpbmc7AA5UcmFuc2Zvcm0uamF2YQABVgACVkwABXNheUhpAAABAAAAAgAAAAAA" + 67*795d594fSAndroid Build Coastguard Worker "AAAAAAAAAQABAAEAAAAAAAAABAAAAHAQAgAAAA4AAgACAAAAAAAAAAAAAQAAABEBAAABAQCAgATc" + 68*795d594fSAndroid Build Coastguard Worker "AgEB9AIMAAAAAAAAAAEAAAAAAAAAAQAAAAgAAABwAAAAAgAAAAQAAACQAAAAAwAAAAIAAACgAAAA" + 69*795d594fSAndroid Build Coastguard Worker "BQAAAAMAAAC4AAAABgAAAAEAAADQAAAAAiAAAAgAAADwAAAAARAAAAEAAABMAQAAAxAAAAIAAABU" + 70*795d594fSAndroid Build Coastguard Worker "AQAAASAAAAIAAABcAQAAACAAAAEAAACGAQAAABAAAAEAAACUAQAA"); 71*795d594fSAndroid Build Coastguard Worker doTest(Transform t)72*795d594fSAndroid Build Coastguard Worker public static void doTest(Transform t) { 73*795d594fSAndroid Build Coastguard Worker t.sayHi("Verification"); 74*795d594fSAndroid Build Coastguard Worker try { 75*795d594fSAndroid Build Coastguard Worker Main.doCommonClassRedefinition(Transform.class, CLASS_BYTES, DEX_BYTES); 76*795d594fSAndroid Build Coastguard Worker } catch (Exception e) { 77*795d594fSAndroid Build Coastguard Worker System.out.println( 78*795d594fSAndroid Build Coastguard Worker "Transformation error : " + e.getClass().getName() + "(" + e.getMessage() + ")"); 79*795d594fSAndroid Build Coastguard Worker } 80*795d594fSAndroid Build Coastguard Worker t.sayHi("Verification"); 81*795d594fSAndroid Build Coastguard Worker } 82*795d594fSAndroid Build Coastguard Worker } 83