2016/12/27

署名済みの apk から署名を削除する方法

Debug Keystore で署名済みの apk が送られてきちゃった。みたいな事は時々あると思うのですが、そういう時は署名を削除して再署名すれば良いのです。

### apk の署名とは
apk の署名は以下の 3つのファイルで構成されています各ファイルの役割については参考リンクが詳しいので、そちらを参照してください。
そのため、これらのファイルを削除すれば、未署名の apk になります。

- META-INF/MANIFEST.MF
- META-INF/CERT.RSA
- META-INF/CERT.SF

注: CERT.RSA と CERT.SF は別の名前(ANDROID.RSA 等)になっている場合があります。

> 参考
> - [APK ファイルの署名の仕様 - urandroid](http://d.hatena.ne.jp/urandroid/20110818/1313656536)


### 署名を削除する
コマンドラインだと以下のようにすると良いでしょう。

```console
$ zip -d app-debug.apk "META-INF/*"
deleting: META-INF/CERT.RSA
deleting: META-INF/CERT.SF
deleting: META-INF/MANIFEST.MF
```

この方法だと `META-INF` ディレクトリ自体を削除してしまうのですが、apk の場合 `META-INF` にこれ以外のファイルが入ることは無さそうなのであくまで経験則。要確認。、これで大丈夫だと思われます。

以下のように `apksigner verify` をするとエラーが出ます。

```console
$ apksigner verify app-debug.apk
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
```

> 参考
> - [apksigner | Android Studio](https://developer.android.com/studio/command-line/apksigner.html)

### 再署名する
未署名の apk に後から署名する方法がそのまま使えます。
`zipalign` を忘れないようにしましょう。

[未署名の apk に後から署名する方法 | 穀風](https://kokufu.blogspot.jp/2016/12/apk.html)

0 件のコメント: