分发与apk分开的库

时间:2016-05-20 08:21:39

标签: android google-play apk android-library app-distribution

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

为了使它成为可选项,我想将该库与apk分开。那样:

  • 打算使用此选项的用户可以 从应用内下载lib

  • 那些不想使用此的人获取较小的apk文件。

我想问一下,是否可以与apk分开分发库?

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

注意:请注意以下事项:

  • 只有在用户下载了库并且在其他情况下不会使用的情况下,才会使用这些类或方法。

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

2 个答案:

答案 0 :(得分:0)

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

请参阅以下链接了解更多详情。

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

答案 1 :(得分: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文件。