2

我想在我的 android 应用程序中使用一个库,但希望这个库对用户来说是可选的。

为了使其成为可选,我想将库与 apk 分开分发。以便:

  • 打算使用此选项的用户可以 从应用程序内下载该库

  • 而那些不想使用它的人会得到一个较小的 apk 文件。

我想问,是否可以将库与 apk 分开分发?.

我见过一些游戏在安装后下载文件。所以,我觉得这可能是可以实现的,但不知道如何实现。


注意:请记住以下几点:

  • 类或方法仅在用户已下载库的情况下使用,在其他情况下不使用。

  • 不要将图书馆的分布与资源的分布混为一谈。所以请记住,我想单独分发一个库而不是资源。

4

2 回答 2

0
  • 您可以使用 APK 分发基本功能
  • 如果用户选择,您的应用程序可以下载其他文件,包括库。如果它们不是扩展文件 (OBB),那么您应该注意托管它们。
  • 这些额外的库必须以类似的方式加载:

    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 文件。

于 2016-05-20T13:16:52.980 回答
0

我认为您不能将库用作扩展文件,因为如果您在项目中使用任何类、库的方法,则必须导入它们,并且如果不使用项目中的库就无法导入它们,但我不确定。

请参阅下面的链接了解更多详细信息。

https://developer.android.com/google/play/expansion-files.html

于 2016-05-20T08:58:01.683 回答