2016-05-20 3 views
2

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

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

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

  • И те, кто не желает использовать этот получить меньший размер файла APK.

Я хочу спросить, Можно ли распространять библиотеку отдельно от APK?.

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


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

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

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

+0

Android игры использовать файлы расширения: https://developer.android.com/google/play/expansion-files.html – helleye

+0

Вы можете, вероятно, поместить его в файл OOB и распространять его таким образом. – Shark

+0

@Shark Если можно распространять библиотеки через OBB-файлы, можете ли вы рассказать мне, как я могу предоставить ссылку на классы библиотеки для их импорта? –

ответ

0

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

См. Ниже ссылку для получения более подробной информации.

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

+0

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

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-файлы.

+0

Извините, не понял, что делает этот код в некоторых точках. Но хотите спросить что-то, связанное с этим, ** 1. ** Нужно ли запускать этот код только один раз после загрузки библиотеки или каждый раз, когда пользователь запускает приложение? ** 2. ** Будет ли он работать так же, как если бы я связал библиотеку в apk i.e с такой же эффективностью? –

+0

Код загружает классы из JAR-файла, так что ваше приложение может их использовать. 1. Этот код необходимо запускать каждый раз, когда приложение запускается пользователем. 2. Я предполагаю, что это добавит немного накладных расходов, так что будет немного медленнее, но это, вероятно, не будет заметно для пользователя (если только эта библиотека не огромна). – helleye

+0

Спасибо. Есть ли что-то, что я могу сделать, когда пользователь загружает библиотеку и после ее завершения выполняет код для добавления классов в apk или добавляет lib к установке apk так же, как добавляется в обычном apk в комплекте с libs? –

Смежные вопросы