5

http://developer.android.com/tools/publishing/preparing.htmlの手順では、Androidアプリケーションを公開する前にエクスポートする必要があることを示しています。エクスポートで実行される手順は何ですか?

これが私が知っていることです:

  1. <Application>のandroid:debuggableがAndroidManifest.xmlでfalseに設定されている
  2. APKは、組み込みのデバッグキーではなく、開発者の(my)キーによって署名されます
  3. zipalignはその署名されたAPKで実行されます

    AndroidManifest.xmlでandroid:debuggableを手動でfalseに設定し、デバッグとエクスポートされたapkを比較しました。異なっていたのは次のファイルだけです。

    Binary files ../../release/x//classes.dex and x/classes.dex differ
    Binary files ../../release/x//META-INF/CERT.RSA and x/META-INF/CERT.RSA differ
    diff -r ../../release/x//META-INF/CERT.SF x/META-INF/CERT.SF
    diff -r ../../release/x//META-INF/MANIFEST.MF x/META-INF/MANIFEST.MF

    それで、上記の私のリストにはすべてが含まれていますか?または、異なるclasses.dexは、デバッグとエクスポートされたapkの間に他の違いがあることを示していますか?

    以下のエラー454の回答のおかげで、各apkのclasses.dexファイルでbaksmaliを実行しましたが、1つの違いが見つかりました。

    diff -r out/xx/xx/xx/BuildConfig.smali ../../../release/x/out//xx/xx/xx/BuildConfig.smali
    7c7
    < .field public static final DEBUG:Z = true
    ---
    > .field public static final DEBUG:Z

    したがって、このリストに4番目の項目を追加できると思います。

  4. クラスBuildConfig(gen /.../ BuildConfig.java)では、DEBUGがfalseに設定されています。

4

3 に答える 3

5

あなたがリストしたものに加えて、プロガードもエクスポート中に実行されます。

classes.dexの違いの性質に非常に興味がある場合は、baksmaliを取得し apkを解凍して、classes.dexファイルを逆コンパイルできます。

java -jar baksmali-1.3.3.jar classes.dex

これにより、コンテンツを含むout /フォルダーが作成され、古いものと新しいものを区別できます。

BuildConfig.DEBUGフラグが異なる理由は、SDKリリースノートリビジョン17で説明されているように、リリースバージョンとデバッグバージョンをエクスポートするためです。

一部のコードをデバッグモードでのみ実行できる機能が追加されました。ビルドは、ビルドタイプに応じて自動的に設定されるDEBUG定数を含むBuildConfigと呼ばれるクラスを生成するようになりました。コード内の(BuildConfig.DEBUG)定数をチェックして、デバッグ専用関数を実行できます。

于 2012-07-05T20:07:30.447 に答える
1

debugターゲットがであるかどうかに関係なく、ビルドで発生するいくつかのステップがありますrelease。これは直接的な答えではありませんが、見てみることをお勧めしますandroid-sdk/tools/ant/build.xml

ファイルを開いたら、を検索しtarget name="release"ます。depends呼び出される同じファイル内の他のターゲットをリストする属性が表示されます。release実行中のターゲットをターゲットと比較できますdebug。各ターゲットの内部では、実行されるもの(の一部のユーティリティなどandroid-sdk/platform-tools)と、実行されるかどうかを決定するものを具体的に確認できます。

また、ターゲット呼び出し中に外部ユーティリティに渡されるパラメータを確認できます。これにより、ユーティリティのこれらのパラメータに関するドキュメントを読んで、特定のステップで何が発生しているかを具体的に確認できます。

また、Eclipseでアプリケーションをエクスポートしている場合でも、ant build.xmlを調査することで、フルビルドで実行されるすべてのステップを体系的に特定することができます。

これがどれほど複雑になるかを示す例として、ターゲットを見ると-set-release-mode、デバッグキーの代わりにリリースキーで署名されたデバッグパッケージを生成できるインスタンスがあります。

于 2012-10-01T17:53:11.000 に答える
0

または、異なる classes.dex は、デバッグとエクスポートされた apk の間に他の違いがあることを示していますか?

同一のコードであっても、結果として得られる classes.dex は、以前にコンパイルされたバージョンと同じバイナリである必要はありません。これは、コンパイラがコードを最適化する方法が異なるためです。

于 2012-07-05T19:58:31.530 に答える