AndroidでAPKを直接インストールできない
問題発生
なぜか、apkファイルをネットからダウンロードしてインストールしようとすると、次のようなエラーが出るようになった。
パッケージが無効の可能性があるため、アプリをインストールできませんでした。
言語を英語にすると、次のメッセージになる。
App not installed as package appears to be invalid
何かしらファイルが壊れているかのように思えてしまうメッセージだが、結論から言えば全く壊れていない。以前にインストールしてアンインストールしたバージョンよりも、今回インストールしようとしたバージョンが古いせいだった。
詳細エラーの取得
この場合には、開発環境からインストールすると、詳細なメッセージが得られるそうなので、やってみる。
スマフォ側をUSBデバッグ有効にし、PCと接続し(その際、スマフォ側に許可するかという警告が出る)、あとはadbコマンドを使ってPCからインストールする。すると。。。
$ adb install F-Droid.apk
Performing Streamed Install
adb: failed to install F-Droid.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: Downgrade detected: Update version code 1015056 is older than current 1016053]
今インストールしようとしているバージョンが、存在しないはずのパッケージのバージョンより古いというのだ。このアプリはアンインストールしてあるので、システムのどこかに「バージョン番号の記録」でもあるのだろうか?
F-Droidのバージョンが違う
問題としては以下だ。
- F-Droidはアンインストールされているにも関わらず、どこかにバージョン番号の記録があるらしい。
- 最新のF-Droid.apkをダウンロードし、それは(既にアンインストール済の)1016053と同じかそれより新しいはずなのに、なぜか1015056だと言っている。
Apkのバージョン番号を知る
ここにapkのバージョン番号を知る方法がある。
$ sudo apt install aapt
$ aapt dump badging F-Droid.apk
package: name='org.fdroid.fdroid' versionCode='1015056' versionName='1.15.6' compileSdkVersion='30' compileSdkVersionCodename='11'
install-location:'auto'
sdkVersion:'22'
....
たしかにバージョン番号がおかしい。F-Droidのウェブサイトに置かれているものが間違っているようだ。以下からダウンロードしたのだが、実際には、1015056になっている。
https://f-droid.org/packages/org.fdroid.fdroid/
最新のものをダウンロード
その下のバージョン履歴のところを見てみると、たしかに最新の1016053があり、ここからダウンロードする。
$ adb install org.fdroid.fdroid_1016053.apk
Performing Streamed Install
Success
これでインストールに成功した。
どこにバージョン番号が記憶されているのか?
今インストールした最新バージョンをいったんアンインストールして、再度古いバージョンをインストールしてみる。
$ adb install F-Droid.apk
Performing Streamed Install
adb: failed to install F-Droid.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE: Downgrade detected: Update version code 1015056 is older than current 1016053]
結果は同じだ。アプリをアンインストールしても、どこかにバージョン番号が格納されており、それ以前のものは拒否されてしまう。
アプリのバージョン番号を消す
アプリをアンインストールしても、そのバージョン番号は残っている。これは、設定>アプリ>すべてのアプリを表示で、F-Droidあるいは、org.fdroid.fdroidという名前で表示されている。
右上のメニューから消すことができる。
すると、アプリ一覧から消えてしまい、バージョン番号もなくなってしまう。
古いバージョンをインストールした後にアップデート
あとはどんなバージョンでもインストールでき、上位バージョンで更新できるようだ。
$ adb install F-Droid.apk
Performing Streamed Install
Success
$ adb install org.fdroid.fdroid_1016053.apk
Performing Streamed Install
Success
F-Droidにバージョンが間違っていると教える
このままではあんまりなので、メールで「バージョン間違っとるよ!」と教えておいた。
ディスカッション
コメント一覧
まだ、コメントがありません