Раздайте библиотеку отдельно от apk

Я хочу использовать библиотеку в своем приложении для Android, но хочу, чтобы эта библиотека была необязательной для пользователей.

Чтобы сделать его необязательным, я хочу распространять библиотеку отдельно от apk. Чтобы:

  • Пользователи, которые намереваются использовать эту опцию, могут загрузить библиотеку из приложения

  • А те, кто не хочет использовать это, получают файл apk меньшего размера.

Я хочу спросить, можно ли раздавать библиотеку отдельно от apk?,

Я видел некоторые игры, загружающие файлы после их установки. Итак, я чувствую, что это возможно, но не знаю, как этого добиться.


Примечание: пожалуйста, имейте в виду следующее:

  • Классы или методы будут использоваться только в том случае, если библиотека была загружена пользователем, и не будут использоваться в другом случае.

  • Не путайте раздачу библиотеки с раздачей ресурсов. Поэтому имейте в виду, что я хочу раздавать библиотеку, а не ресурсы.

2 ответа

Я не думаю, что вы можете использовать библиотеку в качестве файла расширения, потому что если вы используете какой-либо класс, методы библиотеки в вашем проекте, вы должны импортировать их, и вы не можете импортировать их без использования библиотеки в проекте, но я не уверен.

Пожалуйста, смотрите ниже ссылку для более подробной информации.

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

  • Вы можете распространять свою базовую функциональность с помощью вашего 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.

Другие вопросы по тегам