如何解决使用ClassLoader和openRawResources加载apk
|| 我可以使用ClassLoader载入res/raw/
文件夹中的apk吗?并要加载apk,请使用openRawResources()。
解决方法
我不知道是否可以从资产中执行此操作,但是如果将资产提取到文件系统中,则可以使用以下顺序(该顺序将忽略需要处理的异常)。在这里,您可以在\'loadedClass \'上使用常规反射方法。
DexClassLoader classLoader = new DexClassLoader(
\"/path/to/your/apk\",getFilesDir().getAbsolutePath(),null,getClass().getClassLoader());
Class<?> loadedClass = classLoader.loadClass(\"full.package.and.class.name\");
,您始终可以将此文件转储到文件系统,并使用反射和DexFile加载它,这使您可以基于反射访问类。
,您确定可以加载APK文件,但是不能简单地“启动”该APK文件(因为它首先需要安装该应用),并且您的应用也无法安装新的应用(由于安全政策\' s)。
如果您的程序需要其他一些应用程序,则应在初次启动时提及此类内容。
您可以使用解压缩的文件(例如7zip)打开.apk
文件。但是您不能使用其中的类,因为其中没有普通的.class
文件。
这是因为Android不使用普通的JVM,而是使用DVM。这是一个基于Apache Harmony Project的JVM,经过优化可在内存不足的设备(例如Android Phone)上运行。该JVM不使用普通的Java字节码(在.class
文件中),而是在导出项目时由Android SDK创建的自己的Dalvik字节码(工具在dx
)。 。
简而言之:您无法从您的应用访问APK文件中的类。如果您没有源代码可以自己编译这些类,则不可以。
参见维基百科文章。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。