2

私のアプリケーションのAndroidManifestファイルでは、メインは常に次Activityのとおりです。android:name

android:name=".MainActivity"

最近、ライブラリを使用するようにアプリを変更しました。すべてのコードはライブラリ プロジェクトに転送されているため、無料バージョンと有料バージョンの両方を同じコードを使用して提供できます (一部の変更を除く)。

Activityマニフェスト ファイルのメインの名前は次のようになります。

android:name="com.name.library.MainActivity"

残念ながら、ユーザーは、更新されたアプリを携帯電話で開くことができなくなったと報告しています。アンドロイドは次のように述べています。App not installed!

いくつかの検索の後、ここでこの問題の原因を見つけましたActivity:このアプリに sを使用しようとする他のアプリに問題を引き起こさずに の名前を変更することはできませんIntent。問題を報告したユーザーが私のアプリをホーム画面に配置したため、ランチャー アプリケーションは古いActivity名前を見つけられなくなったと思います。本当?

しかし、これはすべてのアプリがリストされたメニューにも影響しますか? 実際、Android は更新時にActivityの名前を更新する必要がありますね。

そして、この問題を解決するにはどうすればよいですか?Activity私の唯一のアイデアは、古い名前で新しいを作成しonCreate(...)、次のコードを配置することです。

Intent i = new Intent(MainActivity.this, MainActivity.class);
i.setComponentName("com.app.library", "com.app.library.MainActivity);
startActivity(i);

しかし、これは明らかに楽しい解決策ではありません...

4

2 に答える 2

3

アクティビティエイリアスも使用できると思います。

<activity-alias
        android:targetActivity="com.name.library.MainActivity"
        android:name=".MainActivity"
        android:label="@string/label"
        android:icon="@drawable/icon">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
    </intent-filter>
</activity-alias>

android:nameは古いアクティビティ名と一致する必要があります

于 2012-12-15T19:37:11.203 に答える
2

間違った方法で変更を加えたと思います。選択肢はそれほど多くありません。ユーザーがホーム画面にアプリへのショートカットを配置した瞬間から、ショートカットは特定のURI(you.old.package.MainActivity)を参照し、実行できるのはあなたが言ったことは、たとえ快適な解決策でなくても。もう1つの解決策は、ユーザーがアプリへのショートカットを削除して再作成することです。これは、アプリケーションが内部構造を変更した瞬間に、起動されるインテントが常にインテントフィルターを備えたものになるためです。

<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

マニフェストで宣言されています。したがって、ショートカットを再作成すると問題が解決します。

古いプロジェクトをライブラリプロジェクトにし、元のプロジェクトを使用するLiteおよびProプロジェクトを作成してlibrayプロジェクトにするために、変更を加える必要があります。このようにして、アクティビティのURIを変更する必要はありませんでした

于 2012-12-15T18:36:20.033 に答える