第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在android / dalvik上動態(tài)加載Java類?

如何在android / dalvik上動態(tài)加載Java類?

牛魔王的故事 2019-10-08 10:03:31
我想知道是否以及如何在dalvik中動態(tài)加載dex或class文件,我編寫的一些快速的“骯臟”測試函數(shù)是這樣的:    public void testLoader() {             InputStream in;             int len;             byte[] data = new byte[2048];             try {                     in = context.getAssets().open("f.dex");                     len = in.read(data);                     in.close();                     DexFile d;                     Class c = defineClass("net.webvm.FooImpl", data, 0, len);                     Foo foo = (Foo)c.newInstance();             } catch (IOException e1) {                     // TODO Auto-generated catch block                     e1.printStackTrace();             } catch (IllegalAccessException e) {                     // TODO Auto-generated catch block                     e.printStackTrace();             } catch (InstantiationException e) {                     // TODO Auto-generated catch block                     e.printStackTrace();             }     } 而Foo界面是這樣    public interface Foo {             int get42();     } f.dex包含該接口的某些dx實現(xiàn):    public class FooImpl implements Foo {             public int get42() {                     return 42;             }     } 上面的測試驅(qū)動程序拋出了defineClass(),它不起作用,我研究了dalvik代碼并發(fā)現(xiàn)了這一點:http://www.google.com/codesearch/p?hl=zh_CN#atE6BTe41-M/vm/Jni.c&q=Jni.c ...所以我想知道是否有人可以啟發(fā)我,這是否可以通過其他方式實現(xiàn)或不應該實現(xiàn)。如果不可能,那么誰能提供無法實現(xiàn)的理由?
查看完整描述

3 回答

?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

Dalvik測試套件中有一個DexClassLoader 示例。它以反射方式訪問類加載器,但是如果您要針對Android SDK進行構(gòu)建,則可以執(zhí)行以下操作:


String jarFile = "path/to/jarfile.jar";

DexClassLoader classLoader = new DexClassLoader(

    jarFile, "/tmp", null, getClass().getClassLoader());

Class<?> myClass = classLoader.loadClass("MyClass");

為此,jar文件應包含名為的條目classes.dex。您可以dx使用SDK附帶的工具來創(chuàng)建這樣的jar 。


查看完整回答
反對 回復 2019-10-08
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

我嘗試使用DexClassLoader,但這也不起作用。我創(chuàng)建了一個派生類,并使用super(“ / sdcard / f.jar”,“ / sdcard”,null,getSystemClassLoader())稱為超構(gòu)造函數(shù);但是沒有成功。defineClass和findClass都不會返回動態(tài)附加的任何類。我的懷疑是android根本不支持此功能,否則正常的defineClass應該已經(jīng)可以工作了??赡苁怯捎谀承┌踩珕栴}。但我一定想聽聽原因,我也在android-developers Google組上啟動了一個線程。

查看完整回答
反對 回復 2019-10-08
?
慕姐4208626

TA貢獻1852條經(jīng)驗 獲得超7個贊

DexClassLoader可以正常工作,如源樹中的dalvik / tests / 068-classloader所示。需要“插件”體系結(jié)構(gòu)的應用程序使用它。請記住,只有通過自定義類加載器才能看到該類。

查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 388 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號