0

adb「スマートアプリの更新」でGoogle Playが行っていることをローカルで(使用または他の方法で)達成することは可能ですか?

私がやりたいことは、PC で (いくつかのコマンド ライン ツールを使用して) バイナリ差分を作成し、Android ツール (adb、シェルなど) を使用して差分をシミュレーター/デバイスにデプロイすることです。

私は 、実際 にどのようにパッチを作成して適用しますadb shell applypatch

ここで、パッチを適用する C++ Android 実装コードを簡単に見てみました: https://android.googlesource.com/platform/bootable/recovery/+/master/applypatch/main.cpp#167

これまでのところ、bsdiff を使用してバイナリ diff を作成しました。これは明らかに、Google Play と Android が使用しているものと同じアルゴリズムを使用しています。しかし、実際にパッチを適用する方法がわかりません。

編集:明確にするために、ここに良い例があります:

  • 私はcom.appv1.apk自分のPCに持っており、デバイス/エミュレーターにもインストールしています。
  • com.appv2.apkのPCにはあります。
  • を使用して、とのbsdiff間のバイナリ diff を作成します。com.appv1.apkcom.appv2.apkdiff.bin

さて、差分をデプロイした後、デバイス/エミュレーターで になるように、デバイス/エミュレーターにデプロイするために実行する必要がある実際のadbコマンドは何ですか?diff.bincom.appv1.apkcom.appv2.apk

4

1 に答える 1

1

私は使用法の印刷の間にそれを言うでしょう:

usage: applypatch [-b <bonus-file>] <src-file> <tgt-file> <tgt-sha1> <tgt-size> [<src-sha1>:<patch> ...]
   or  applypatch -c <file> [<sha1> ...]
   or  applypatch -s <bytes>
   or  applypatch -l

Filenames may be of the form
  MTD:<partition>:<len_1>:<sha1_1>:<len_2>:<sha1_2>:...
to specify reading from or writing to an MTD partition.

および以下のコメント:

// This program applies binary patches to files in a way that is safe
// (the original file is not touched until we have the desired
// replacement for it) and idempotent (it's okay to run this program
// multiple times).
//
// - if the sha1 hash of <tgt-file> is <tgt-sha1>, does nothing and exits
//   successfully.
//
// - otherwise, if no <src-sha1>:<patch> is provided, flashes <tgt-file> with
//   <src-file>. <tgt-file> must be a partition name, while <src-file> must
//   be a regular image file. <src-file> will not be deleted on success.
//
// - otherwise, if the sha1 hash of <src-file> is <src-sha1>, applies the
//   bsdiff <patch> to <src-file> to produce a new file (the type of patch
//   is automatically detected from the file header).  If that new
//   file has sha1 hash <tgt-sha1>, moves it to replace <tgt-file>, and
//   exits successfully.  Note that if <src-file> and <tgt-file> are
//   not the same, <src-file> is NOT deleted on success.  <tgt-file>
//   may be the string "-" to mean "the same as src-file".
//
// - otherwise, or if any error is encountered, exits with non-zero
//   status.
//
// <src-file> (or <file> in check mode) may refer to an EMMC partition
// to read the source data.  See the comments for the
// LoadPartitionContents() function for the format of such a filename.

それはかなり簡単です。

したがって、パッチcom.appv1.apkを適用diff.binして結果をに保存する基本的なコマンドは次のcom.appv2.apkようになります。

applypatch com.appv1.apk com.appv2.apk <com.appv2.apk SHA1> <com.appv2.apk size> <com.appv1.apk SHA1>:diff.bin
于 2016-09-15T14:35:48.937 に答える