0

アプリの複数のバリエーションで使用される共有ライブラリがあります。アプリの構成に従って、未使用のライブラリ リソースを削除できるようにしたいと考えています。

  • リソースを完全に削除したくないので、Lint は役に立ちません
  • リソースは共有コードによって参照されます。特定の分散では、かなりのチャンクが使用されていないことを知っています
  • リソースを参照する共有コードが使用されているため(特定の使用状況の違いだけで、かなりのチャンクが使用されていません)、プロガードも役に立ちません

ライブラリjarから削除するために、antビルドスクリプトを使用してハッカーに向かっています。他のアイデアはありますか?

4

2 に答える 2

0

これにより、ディレクトリ全体が .apkビルドから除外されます。./www/app

<property name="aapt.ignore.assets" value="&lt;dir&gt;app:" />

于 2014-04-09T20:59:11.660 に答える
0

私の解決策を見つけて、プロパティ aapt.ignore.assets を使用して、最終的な apk で不要なものを削除します。SDK r22 tools/ant/build.xml からの抜粋

    <!-- 'aapt.ignore.assets' is the list of file patterns to ignore under /res and /assets.
     Default is "!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~"

     Overall patterns syntax is:
       [!][<dir>|<file>][*suffix-match|prefix-match*|full-match]:more:patterns...

     - The first character flag ! avoids printing a warning.
     - Pattern can have the flag "<dir>" to match only directories
       or "<file>" to match only files. Default is to match both.
     - Match is not case-sensitive.
-->
<property name="aapt.ignore.assets" value="" />

このプロパティの意図しない副作用は、「コード生成」中にも使用され、ドローアブル ID が生成されず、proguard が文句を言うことです。構成に dontwarn を追加する必要があります。

また、これらのリソースを、リソースが使用されていないときに呼び出されない独自のクラスにラップすることもできます。それらが共通のクラスにある場合、使用されていなくても、Java 静的初期化子はそれらをリンクしようとしてクラッシュするためです。

于 2013-11-06T22:57:33.263 に答える