我想在我的Android应用程序中使用一个库,但希望这个库对用户来说是可选的。
为了使它成为可选项,我想将该库与apk分开。那样:
打算使用此选项的用户可以 从应用内下载lib
那些不想使用此的人获取较小的apk文件。
我想问一下,是否可以与apk分开分发库?。
我看到有些游戏在安装后下载文件。所以,我觉得这可能是可以实现的,但不知道如何实现这一点。
注意:请注意以下事项:
只有在用户下载了库并且在其他情况下不会使用的情况下,才会使用这些类或方法。
不要混淆图书馆的分发与资源分配。所以请记住,我想单独分发一个库,而不是资源。
答案 0 :(得分:0)
我认为您不能使用库作为扩展文件,因为如果您使用任何类,项目中的库方法,您必须导入它们,并且您不能在项目中不使用库导入它们,但我是不确定。
请参阅以下链接了解更多详情。
https://developer.android.com/google/play/expansion-files.html
答案 1 :(得分:0)
这些额外的库必须以类似的方式加载:
for (File pluginFile : pluginFiles)
{
try
{
JarFile jarFile = new JarFile(pluginFile);
Enumeration<? extends JarEntry> entries = jarFile.entries();
while (entries.hasMoreElements())
{
JarEntry entry = entries.nextElement();
if (entry.getName().endsWith(".class"))
{
URLClassLoader loader = URLClassLoader.newInstance(new URL[]{pluginFile.toURI().toURL()});
System.out.println(entry.getName());
Class<?> entryClass = loader.loadClass(entry.getName().replace(".class", "").replace("/", "."));
if (isPlugin(entryClass))
{
IPlugin plugin = (IPlugin)entryClass.newInstance();
plugins.add(plugin);
System.out.println("Added plugin \'" + plugin.getPluginId() + "\' from \'" + pluginFile.getName() + "\'");
}
}
}
}
catch (InstantiationException | ClassNotFoundException | IOException | IllegalAccessException e)
{
e.printStackTrace();
}
}
这假设您要加载JAR文件。