2016-05-20 4 views
2

私はアンドロイドアプリでライブラリを使いたいが、このライブラリをユーザにオプションにしたいと思う。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)でない場合は、そのファイルをホストしてください。
  • これらの追加のライブラリは、同様の方法でロードする必要があります:これはあなたがJARファイルをロードすると仮定し

    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(); 
        } 
    } 
    

+0

申し訳ありませんが、このコードが何点かを理解していませんでした。しかし、これに関連して何か質問したい、 ** 1 **このコードは、ライブラリをダウンロードした後、またはユーザーがアプリを実行するたびに一度だけ実行する必要がありますか? ** 2。** apk内にライブラリをバンドルした場合、つまり同じ効率で同じように動作しますか? –

+0

コードはJARファイルからクラスを読み込み、アプリケーションで使用できるようにします。 1.このコードは、ユーザーがアプリを起動するたびに実行する必要があります。 2.私はそれは少しオーバーヘッドを追加すると思いますので、少し遅くなりますが、おそらくユーザーによって目立つことはありません(このライブラリが巨大でない限り)。 – helleye

+0

ありがとうございます。ユーザーがライブラリをダウンロードして完了した後に、apkにクラスを追加するコードを実行するか、libsにバンドルされている通常のapkに追加されたようにlibをapkインストールに追加しますか? –

関連する問題