2

私はそのような問題を抱えています: 私はいくつかの test.apk ファイルを持っています. すべてのグラフィック リソースを含む res フォルダーがあります。アーティストが次に行うために、.bat ファイルを作成する必要があります。

apk には次のようなファイルがあります。

assets META-INF res AndroidManifest.xml classes.dex resources.arsc

したがって、私が必要なタスクを理解している限り、次のことを行う必要があります。

  1. 1.apk を 1.zip にコピー
  2. 1.zip を 1 つのフォルダに解凍します
  3. 「res」フォルダーを削除し、そこに自分のフォルダーを配置します
  4. 新しい 1.apk ファイルを作成し、証明書で署名します。終わり。

2 つの質問があります。

  1. バッチコマンドでファイルを圧縮/解凍する方法は?
  2. 新しい証明書を使用して新しいフォルダーに署名するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

2

この問題を解決しました!これが解決策です。誰かがそれを役に立つと思うかもしれません。バットファイルのコマンド。

必要なもの: 7zip アーカイブ プログラム、Android SDK、JDK 1.7。

これを行うために使用されるリソースへのリンク: http://developer.android.com/tools/publishing/app-signing.html http://developer.android.com/tools/building/index.html

SET app_input_file_name=%1
SET tmp_app_name="tmp_app_name.zip"
SET zip_tool_path="C:\Program Files\7-Zip\7z.exe"

rem 1. AndroidSampleApp.apk のコピーを作成し、名前を AndroidSapmleApp.zip に変更します

copy %app_input_file_name% %tmp_app_name%

rem 2. AndroidSapmleApp.zip ファイルからフォルダ res/ をルート フォルダに抽出します。

%zip_tool_path% x %tmp_app_name% res/

rem 3. META-INF および res フォルダーを削除します。

%zip_tool_path% d %tmp_app_name% res
%zip_tool_path% d %tmp_app_name% META-INF

リソースを次のように変更した後:

SET app_output_file_name=%1
SET tmp_app_name="tmp_app_name.zip"
SET dev_certificate="mycert.keystore"
SET dev_certificate_alias="mycert"
SET zip_tool_path="C:\Program Files\7-Zip\7z.exe"
SET jarsigner_tool_path="C:\Program Files\Java\jdk1.7.0_17\bin\jarsigner.exe"
SET zipalign_tool_path="D:\SDKs\android-sdk_r18-windows\android-sdk-windows\tools\zipalign.exe"

rem 4. 抽出した res フォルダーを変更します。新しいファイルを削除または追加することはできません!! 画像のみ変更。rem 5. copmress メソッド Store を使用して、変更した res/ フォルダーを AndroidSapmleApp.zip に追加します。

%zip_tool_path% a %tmp_app_name% res -mx0

rem 6. res/ フォルダを削除

rmdir res /s /q

rem 7. AndroidSapmleApp.zip の名前を AndroidSapmleApp.apk に変更します。

copy %tmp_app_name% %app_output_file_name%

rem 8. 証明書 mycert.keystore でアプリケーションに署名します

%jarsigner_tool_path% -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore %dev_certificate% %app_output_file_name% %dev_certificate_alias%

rem 9. すべて問題ないことを確認します

%jarsigner_tool_path% -verify %app_output_file_name%

rem 10. *.apk の zipalign:

%zipalign_tool_path% -v -f 4 %app_output_file_name%

rem 11. 古いアプリを削除: adb uninstall com.partypoker.poker

rem adb uninstall com.packagename

rem 12. アプリをシミュレーター/デバイスにインストールします。

rem adb install AndroidSapmleApp.apk
于 2013-03-12T17:37:56.420 に答える
1

OPは、他人のアプリを「盗む」ことを試みていません。彼は、Java コードを作成するプロセスをグラフィックスを作成するプロセスから切り離し、Java コードがコンパイルされた後にグラフィックスの作成プロセスが行われるようにしようとしています。これはやりたいと思うのは完全に合理的なことですが、不可能ではないにしても、非常に困難になる可能性があります..

問題は、apk 内のリソースが aapt によって内部形式にコンパイルされていることです。置換もこの内部形式である必要があります。ただし、コンパイル プロセス中に aapt は、リソース ID を定義する R クラスを生成します。この R クラスは、コンパイルされた dex ファイルが正しいリソース ID を使用するように、Java コンパイラで使用できる必要があります。

ここの図: http://developer.android.com/tools/building/index.htmlは、これをグラフィック形式で示しています。

動作する可能性のある修正されたワークフロー:

プレースホルダー グラフィックスを使用する Java 開発者は、apkbuilder ステップまではアプリケーションをビルドしますが、これは含まれません。

  • グラフィック開発者はきれいな画像を作成します -- 既存のプレースホールド グラフィックに制限します (つまり、それらを編集しますが、新しいグラフィックを追加したり、古いグラフィックを削除したりしません)。
  • バッチ ファイルは aapt を実行します。生成された ID が一致することを確認するには、元の res ディレクトリ全体にアクセスできる必要があります。
  • バッチ ファイルは apkbuilder を実行して、署名されていない apk を生成します。
  • apk は、必要に応じて zipalign され、プロガードされ、署名されます。

これをセットアップする最善の方法は、おそらく既存の Ant ビルド スクリプトから開始し、目的のワークフローをサポートする新しい Ant ビルド スクリプトを作成することです。

...うーん...頑張って....

于 2013-03-11T20:23:33.643 に答える