我正在为Android构建一个组件化的应用程序。简而言之,我希望在运行时加载APK文件并从中执行代码。
我已经成功使用了DexClassLoader
来加载和实例化一些类,问题在于读取APK的资源。
我想创建一个自定义的Context
对象,可以使用它来加载这些资源(例如LayoutInflater
实例),类似于createPackageContext()
,但此方法不适用于我的应用程序,因为它只查看已安装的包。
我正在为Android构建一个组件化的应用程序。简而言之,我希望在运行时加载APK文件并从中执行代码。
我已经成功使用了DexClassLoader
来加载和实例化一些类,问题在于读取APK的资源。
我想创建一个自定义的Context
对象,可以使用它来加载这些资源(例如LayoutInflater
实例),类似于createPackageContext()
,但此方法不适用于我的应用程序,因为它只查看已安装的包。
InputStream in = getResources()
.openRawResource(R.raw.fileName);
然后只需从此流中读取。此示例将打开res/raw/fileName.html以进行读取。但是,我不明白为什么要以这种问题方式从自己的apk文件中加载执行类。如果我误解了,并且您需要从其他apk文件中加载,则谁会阻止打开该文件以进行输入并从中读取?它只是一个压缩的ZIP归档文件。我认为您可以构建覆盖数据访问方法的实现,并且您的实例可以包含从中读取数据的文件的引用。
PackageManager.getPackageArchiveInfo
将返回一个PackageInfo
对象,它将允许您获取一个ApplicationInfo
。通过该对象,您可以调用PackageManager.getResourcesForApplication
来返回一个Resources
对象。 - André Oriani