Apk的Aapt转储标记未列出活动别名的任何可启动活动

the*_*ace 5 android aapt android-activity-alias

我最近通过以下更改更改了AndroidManifest.xml:

  • 将我的主启动器活动的名称更改为NewMainActivity。
  • 添加了活动别名,其中旧活动名称指向新活动。

现在,当我这样做时aapt dump badging <apk-path>| grep launchable-activity,没有输出。在上述更改之后发生了这种情况。

  <activity
        android:name="com.a.b.NewMainActivity"
        ....
        android:launchMode="singleTask" >
   </activity>
   <activity-alias
        android:name="com.a.b.OldMainActivity"
        android:launchMode="singleTask" 
        android:targetActivity="com.a.b.NewMainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity-alias>
Run Code Online (Sandbox Code Playgroud)
  • 我如何解决它?
  • 是否有aapt的任何新版本(我正在使用Android Asset Packaging Tool,v0.2-3051502)来解决此问题?

小智 0

  1. 您可以添加包含某些类别的意图过滤器,例如MAINLAUNCHERDEFAULT。像这样的东西:
<activity
    android:name="com.a.b.NewMainActivity"
    ...
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
<activity-alias
    android:name="com.a.b.OldMainActivity"
    android:launchMode="singleTask" 
    android:targetActivity="com.a.b.NewMainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity-alias>
Run Code Online (Sandbox Code Playgroud)

像这样,您NewMainActivity将正常工作并将被注册为可启动活动,并且您的 OldMainActivity 将在此处作为别名工作。

  1. 在以后的版本中也是如此,例如这个在这里