2012-02-15 14 views
13

Androidソースコードに時間を費やしてきた人のために、android.Rクラスで生成されたIDは、1:1で見つかった実際のリソースを反映しているというニュースではありません。付属のJARのディレクトリres/。 drawable/styles/layoutの多くは、「公開」でなく、android.R.xxxを参照することでアプリケーションにアクセス可能です。R.javaの保護されたAndroid ID

私の質問は、誰もがAndroidは、実際のリソースグラフとは異なりR.javaクラスを生成することができるれるメカニズムを知っているんですか?第2に、開発者としてライブラリとして使用されるアプリケーションで公開されるIDを部分的に保護するために利用できるメカニズム(ビルドルールなどを使用する)ですか?

ありがとうございます! AAPTを使用して

答えて

1

Androidのパッケージのリソース、およびビルドプロセス中にこのツールを使用して、Rファイルを生成します。このステップでは、XMLファイルはバイナリにコンパイルされ、他のリソースはそのままパッケージ化されます。 .apkファイルをzipアーカイブとして開き、すべてのリソースファイルにそのままアクセスできます。ライブラリプロジェクトには、コンパイル時にプロジェクトに追加されるソースファイルとリソースが含まれているだけなので、.apkファイルには何らかの形で存在します。おそらく、XMLはすでにライブラリプロジェクト用にコンパイルされているため、レイアウトは1:1ではないでしょう。おそらく、aaptを使ってライブラリプロジェクトからビルド時にファイルを削除する方法がありますが、プロジェクトではアクセスできません。 aptとantを使用してコンパイル時にリソース名を難読化する方法もあるかもしれませんが、それでそれらがアクセスできなくなるわけではありません。

私はあなたが実際のリソースグラフとは異なりR.javaクラスを希望する理由はわかりません。ビルド時にこれらのリソースを含めないでください。あるいはapkに入れる予定です。あなたのレイアウトは出力にバイナリファイルとして圧縮されているので、別のプロジェクトでデコンパイルまたは再利用するのが簡単ではありません。

終盤はここで何ですか?それがあなたのリソースを守ることであれば、それは難しいでしょう。誰かが自分の電話を根絶する能力を持っているなら、Androidは非常に安全ではありません。私があなたのIPを保護したいのであれば、ここでの最終ゲームだと思っています。プロジェクトをapkにコンパイルし、apkから重要なリソースを逆コンパイルまたは抽出できるかどうか確認します。たぶん難読化を試みるかもしれませんが、コンパイルされたXMLファイルが、簡単に逆コンパイルできないほど難読化されているかどうかを知るには十分ではありません。

誰かが私が間違っているなら、私を修正して自由に感じるが、これはちょうど私の2セントです。

+0

質問の主な目標は、R.javaのAndroidのROMビルドがリソースを除外することができます方法を学ぶことだけです。このロジックは除外されているドロウアブルでは機能しませんが、2段階でコンパイルできるレイアウトについて興味深い点があります。そのため、別の方法が必要です。 2番目の質問に関しては、すべてのidsがメインパッケージ内の単一の 'R'クラス参照に結合するので、ライブラリプロジェクトで最終的なR.javaファイルで発生する汚染を浄化するほどセキュリティは懸念されませんしばしば重複につながる。 – Devunwired

+0

@Devunwiredあなたはプロガードかオブザーブツールを使用していますか?私のAPKファイルを見ると、私のdrawable(.pngイメージなど)はすべて、resフォルダのそれぞれの場所に置かれています。私が言ったように、R.javaファイルはコンパイル・フェーズのaaptステップの間に作成されるので、必要なものがあれば、そのステップの前でも途中でも構いません。 – onit

+0

これは私の要点ですが、あなた自身のアプリの代わりにandroid.jarを使って演習を行います。 'res /'ディレクトリには、あなたのコードで 'android.R.drawable.xxx'を呼び出すことによって参照可能なものよりもはるかに多くの描画可能なものがあります。 – Devunwired

関連する問題