いつもと違うPCでビルドしたAPKを、
adbからAndroid端末にインストールしようとしたところ、
Waiting for device.
Target device: htc-htl22-*******
Uploading file
local path: *********/app-debug.apk
remote path: /data/local/tmp/**パッケージ名**
Installing **パッケージ名**
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/**パッケージ名**"
pkg: /data/local/tmp/**パッケージ名**
Failure [INSTALL_FAILED_UID_CHANGED]
みたいなエラーが出てインストールに失敗してしまいました。
ぐぐってみると解決方法として
- Root取ってAPKの残骸を消せ
- 端末初期化しろ
みたいな普段使いの端末ではあまりやりたくない解決策しか出てきませんでした。
APKをアンインストールしてもデータ領域には残骸が残るらしく、
DebugとかでUIDが異なるAPKを入れようとすると、
この残骸と衝突してINSTALL_FAILED_UID_CHANGEDというエラーが出るそうです。
残骸を消すにはルート取ったり初期化が必要なわけで…。
かなり手詰まり感がすごいのですが、楽な回避方法を思いつきました。
解決方法
その解決方法は「Package name」を変えることです。
データ領域にパッケージ名でファイルが作られるので、
パッケージ名さえ変えてしまえば衝突が回避できます。
AndroidStudioで開発していればGradleをいじるだけで
簡単にパッケージ名を変えられるのでこれを使わない手はありません。
(本番のパッケージ名はもとの名前に戻す、なんてことも可能です。)
Gradleでパッケージ名を変える
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.1.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 19
versionCode 1
versionName "1.0"
// これを追記
applicationId "新しいパッケージ名"
}
buildTypes {
……
これでビルドして端末にインストールしたらうまくいきました。