2009-05-20 1 views
3

データベーススキーム、グラフィックス、コードなど、私のアプリケーションに多くの変更を加えました。最大のものは、名前が変更されたパッケージ名です。アプリケーションはmanifeste.xmlファイルに同じ名前とIDを持ち、apkは同じデジタル署名で同じ名前を持っています。アンドロイドアプリを更新すると2回表示されるのはなぜですか?

しかし、./adb install -r myapp.apkを使用すると、myappがメニューに2回表示されます。もちろん、DBは名前としてパッケージ名を使用してディレクトリに格納されているため、ユーザーはデータが失われているように感じます。

どうすればこのようなことが起こらないようにすることができますか?できない場合は、どうすればそのマイグレーションを自動化できますか?

は、私はいくつかの手がかりを持っている:など新しいものに古いファイルからデータベースをコピーし、古いアプリをアンインストールするためのユーザーを促し

答えて

3

は直接答えは、アプリケーションが2回表示されるので、AndroidマーケットとAndroid OS 2つの異なるパッケージを2つの異なるアプリケーションとして表示します。コードは同じにすることができますが、パッケージが異なる場合、アプリケーションは完全に異なっています

Androidマーケットはアプリケーションをパッケージ名で識別します。私はこれがOSがパッケージによってプログラムを追跡しているからだと思う...あなたは全く同じ名前の2つのパッケージをインストールしたくないと思いますが、どのOSがどのパッケージを呼び出すのかは分かりますか?したがって、既にインストールされているパッケージと同じ名前のパッケージをインストールすると、OSはそれをパッケージのアップグレードとして表示し、新しいプログラムが古いユーザーデータにアクセスするようにします。

あなたはパッケージが同じIDを共有していると述べますが、これはユーザーIDとみなします。これにより、パッケージ間でデータを共有することができます。詳しい情報はこちら:

http://developer.android.com/guide/topics/security/security.html#userid

は勧告:それはあなたの新しいパッケージとそれのデータを共有できるように必要とされるものは何でものり提供古いパッケージに小さなアップグレードをリリース。次に、新しいパッケージをコードでリリースして、古いパッケージ(同じUserIdと署名が必要)からユーザーデータをインポートします。移行はユーザーにシームレスに行われます(手動のバックアップとインポートは不要です)。

+1

唯一の不安定な部分は、今あなたがアンインストールするためのプログラムを持っている...私は彼らが正しいものをアンインストールすることを願っています。プログラムによるアンインストール、私の次のSOの質問。 – Will

+0

この問題でも対処してください。 –

1

アプリケーションの署名が同じである必要があります。別のEclipseでプロジェクトをインポートしてビルドし、それを市場にアップロードすると、2つの別々のアプリケーションが表示されます。

関連する問題