安卓动态加载资源

5
我正在尝试在我的应用程序中使用DexClassLoader下载JAR / APK。我想将我的应用程序模块化,以便可以按需下载用户可能使用的UI流程,而不是将它们全部一起打包到我的主要应用程序中。
加载实际类很好用,并且我成功加载了一些UI组件,可以将其添加到我的主机活动中。
我的问题是,显然我无法访问或添加资源(字符串,可绘制项,布局)到我的下载包中,因为它们没有随我的主机APK一起提供。是否有可能为我的可下载的JAR / APK动态加载资源?

1
你找到任何解决方案了吗? - nitesh goel
看起来是另一个问题的重复,可以查看答案:https://dev59.com/1FvUa4cB1Zd3GeqPtnE5#44138255 - Miha_x64
1个回答

1
您可以“动态地”下载任何资源,将它们放在您选择的目录中,并在您的应用程序中使用它们。这是我目前在一个应用程序中所做的。我认为您不能将它们放在与项目中的资源相同的目录中,但这有关系吗?

但是怎么做呢?如果我在下载的代码中使用R.string.my_string,那么宿主应用程序的R文件将不包括my_string。实际上,它将变成一个常量,并可能指向完全不同的字符串。我知道这一点,因为我实际上已经尝试过,结果输出的字符串完全不同。对于布局资源也是如此。我还缺少Android根据设备配置进行动态布局选择的功能。 - dnkoutso
不,你不能轻易地将自己的资源包含在R文件中。但是如果你下载了这些资源,就不需要这样做了。你可以将字符串和png文件下载到Environment.getExternalStorageDirectory()+"/assetsDir"目录下,然后从那里读取它们。你不能将东西包含在R文件中,因为R文件是在编译时构建的,而不是在运行时。 - Christine
我理解并同意。所以唯一的解决方法是提取它们并从/assetsDir中使用它们?那么我将不得不编写自己的资源加载器,这正是我试图避免的,因为我可能会失去不同屏幕和配置的动态资源加载。还有其他想法吗? - dnkoutso
您可以为不同的屏幕分辨率/尺寸等创建不同的assetDirs,并将该目录的名称放在相应的/res/values/strings.xml文件中。所有这些的缺点是,您会将所有资源加载到手机上,而不仅仅是适用于该类型手机的资源。 - Christine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接