Android读取另外一个apk的资源


情景1: 测试程序A与被测试程序B

程序A:

public class TestA extends ActivityInstrumentationTestCase2{
static Class<?> launcherActivityClass;
static {
try {
launcherActivityClass = Class.forName("com.ymf.a.ShareA");
}catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}


@SuppressWarnings("unchecked")
public TestA() {

super("com.ymf.a", launcherActivityClass);
}


@Override
protected void setUp() throws Exception {
super.setUp();
getActivity();
}
protected void tearDown() throws Exception {
super.tearDown();
}

public void testAA(){
try {
Class c = Class.forName("com.ymfa");
Field f = c.getDeclaredField("test_var");
Integer i = (Integer) f.get(null);
Android.util.Log.i("TAG",i+"");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}


程序B:

public class ShareId_B extends Activity {
static int test_var = 10;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

}


情景2: 两个独立的APK,配置成同一个进程

A:

public class Ymf {
public static int a = 10;
}

B:

public class ShareId_B extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //PathClassLoader loader = new PathClassLoader("/data/app/com.ymf.a.apk", ClassLoader.getSystemClassLoader());
        Context context = null;
        try {
context = createPackageContext("com.ymf.a", Context.CONTEXT_INCLUDE_CODE|Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
        Class c = null;
try {
c = context.getClassLoader().loadClass("com.ymf.a.Ymf");

android.util.Log.i("TAG",context.getClassLoader().toString()+"");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        Field f = null;
try {
f = c.getDeclaredField("a");
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        int o = 0;
try {
o = (Integer) f.get(null);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        android.util.Log.i("TAG",o+"");

相关内容