Android一个应用(APK)多个入口的实现方式整理

Android一个应用(APK)多个入口的实现方式整理

概要:

某些情况下,需要为apk设置多个执行入口,也就是安装后在应用程序列表中出现多个图标,各个图标APP不同模块的入口点,并且各个模块运行在不同的进程中。

Android一个应用多个入口有以下三种实现方式;

第一种:使用intent-filter

第二种:使用process属性

第三种:使用别名(activity-alias


1、方法一:直接在Activity节点中添加intent-filter

给相应的Activity增加如下代码:

    <intent-filter>

          <actionandroid:name="android.intent.action.MAIN"/>

          <categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

 

2、方法二:使用Activity的属性process,不同的Activity是运行在不同的进程中

Activity有一个重要的属性process,这个属性是指定Activity运行时所在的进程。没有指定此属性的话,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一致。在AndroidManifest.xml文件中所有组件元素的process属性能够为该组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。所以可以通过给每一个Activity指定标签、图标和进程名来区分不同的入口,具体实现如下:

<activity

     android:name=".MainActivity"

     android:label="@string/app_name"

android:process=”:process.main”>

     <intent-filter>

         <actionandroid:name="android.intent.action.MAIN"/>

         <categoryandroid:name="android.intent.category.LAUNCHER"/>

     </intent-filter>

</activity>

 

 

<activity

    android:name=".MainActivityB"

android:label="@string/app_nameB"

android:process=”:process.sub”

android:icon=”@drawable/icon1”

android:launchMode = “singleInstance”>

    <intent-filter>

       <actionandroid:name="android.intent.action.MAIN"/>

       <categoryandroid:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

</activity>

需要注意的是,为Activity指定process属性后,还必须为其指定launchModesingleInstance,这样才有效。

3、方法三:使用activity-alias 

activity-aliasandroid里为了重复使用Activity而设计的。

当在ActivityonCreate()方法里,执行getIntent().getComponent().getClassName();得到的可能不是这个Activity的名字,有可能是别名的名字

创建两个图标:

 <activity

     android:name=".MainActivityB"

     android:exported="true" 

     android:label="@string/app_nameB">

     <intent-filter>

         <actionandroid:name="android.intent.action.MAIN"/>

         <categoryandroid:name="android.intent.category.LAUNCHER"/>

     </intent-filter>

 </activity>

       

 <activity-alias

    android:name="ActivityB_copy"

    android:icon="@drawable/icon1"   

    android:screenOrientation="landscape"

    android:targetActivity=".MainActivityB">

    <intent-filter>

        <actionandroid:name="android.intent.action.MAIN"/>

        <categoryandroid:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

</activity-alias>

创建一个图标:

<activity

     android:name=".MainActivityB"

     android:exported="true" 

     android:label="@string/app_nameB">

</activity>

       

 <activity-alias

    android:name="ActivityB_copy"

    android:icon="@drawable/icon1"   

    android:screenOrientation="landscape"

    android:targetActivity=".MainActivityB">

    <intent-filter>

        <actionandroid:name="android.intent.action.MAIN"/>

        <categoryandroid:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

</activity-alias>

 

其中android:exported="true"表示允许别的app调用该activity

 

这个应用会在桌面上建两个进入点,即建两个可以进入MainActivityB这个Activity的快捷图标。这时getIntent().getComponent().getClassName()得到的名字就不一样,一个是com.test.MainActivityB,一个是com.test.ActivityB_copy

 

总结:上面三种实现方式其实原理都是一样的,都是为第二个Activity添加

    <intent-filter>

        <actionandroid:name="android.intent.action.MAIN"/>

        <categoryandroid:name="android.intent.category.LAUNCHER"/>

    </intent-filter>

"intent-filter为程序增加入口图标。

  

问题

·        因为多个图标共用一个包名,所以只要卸载一个程序,与这个APK包名相同的程序也都会在桌面上消失;

·        从其它应用跳转到该APK时,需要通过ACTION区分跳转到具体哪一个模块(比如从资源管理器选择一个数据时,到底打开哪一个应用,需要通过action加以区分);

·        由于多个图标、splash、标题等需要区分的资源都放在一个APK中,这增加了APK的大小。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 是的,一个APK文件可以包含多个应用。这种情况通常是通过将多个不同的功能分别打包到单独的模块中,然后在同一个APK文件中打包这些模块,实现多个应用的打包。这样做可以节约下载和安装的时间,并使用户可以一次安装多个应用。 ### 回答2: 在Android中,通常一个APK文件只能安装一个应用程序。这是因为APK文件包含了应用程序的所有资源和代码,包括主程序、库文件、资源文件等。然而,有一种特殊的情况可以在一个APK中安装多个应用程序,那就是使用“Split APKs”(分离的APK)技术。 使用Split APKs技术可以将一个APK文件分割成多个独立的APK文件,每个文件对应一个应用程序。这样,用户只需下载一个APK文件并安装,就能同时安装多个应用程序。 在实现这个功能的过程中,需要使用Android的动态模块加载技术。通过动态加载功能,可以在运行时加载和卸载分离的APK文件,并调用其中的应用程序。这些分离的APK文件可以通过远程服务器下载,也可以作为本地资源存储在设备上。 使用Split APKs技术的一个常见应用场景是游戏应用程序。在游戏中,可能会通过分离APK技术将游戏的主体和扩展内容(例如新关卡、道具等)分开存储,以便实现动态更新和灵活扩展的目的。 总之,通过Split APKs技术,可以在一个APK文件中安装多个应用程序。这种方式在某些特定的应用场景下非常有用,可以提供更好的用户体验和开发灵活性。 ### 回答3: 在Android系统中,一个APK文件通常只能安装一个应用程序。APK文件是Android应用程序的安装包,每个APK文件都会对应一个独立的应用程序。当用户在设备上点击APK文件进行安装时,系统会将APK文件解压并安装对应的应用程序,将应用程序的相关文件和数据存储在设备的特定目录中。 然而,有一些特殊情况下可以在一个APK文件中安装多个应用程序。例如,可以使用"多渠道打包"的技术来在一个APK文件中打包多个应用程序。多渠道打包是一种将多个APK合并为一个APK的技术,不同的渠道可以安装不同的应用程序。这种方式通常用于应对市场分段、产品定制或者企业内部分发等需求。 另外,有些应用程序可能提供插件或者扩展机制,允许在应用程序中安装额外的功能模块或者插件。这些插件或者扩展模块可以作为单独的APK文件进行安装,与主应用程序进行交互并提供额外的功能。但是这种方式一个APK文件中安装多个独立的应用程序并不相同,插件或者扩展模块仍然需要依赖主应用程序的运行环境,无法独立运行。 总而言之,通常情况下,一个APK文件只能安装一个应用程序。如果需要在一个APK文件中安装多个应用程序,可以使用多渠道打包的技术。此外,还可以通过插件或者扩展机制来在应用程序中安装额外的功能模块或者插件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值