【问题标题】:How to install two apk at once?如何一次安装两个apk?
【发布时间】:2013-02-27 13:28:09
【问题描述】:

我对我的应用有要求。我有一个用于显示书籍的应用程序和一个用于阅读书籍的应用程序,基本上是 Viewer。我有两个问题:

  1. 是否可以在开始时同时安装两个 apk?
  2. 是否可以集成两个 apk ?

当我点击应用程序的第一个选项时,我得到了这个异常:

FATAL EXCEPTION: main
Unable to instantiate activity ComponentInfo{jp.co.atori.A12022411/jp.co.atori.A12022411A.FSDMainLauncherActivity}: java.lang.ClassNotFoundException: jp.co.atori.A12022411A.FSDMainLauncherActivity in loader dalvik.system.PathClassLoader[/data/app/jp.co.atori.A12022411-1.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: jp.co.atori.A12022411A.FSDMainLauncherActivity in loader dalvik.system.PathClassLoader[/data/app/jp.co.atori.A12022411-1.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)

更改清单后它看起来像:

<activity
    android:name="jp.co.atori.A12022411.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="aircel-bookshelfviewer" />
    </intent-filter>
</activity>
<activity
    android:name="jp.co.atori.A12022411A.FSDMainLauncherActivity"
    android:label="@string/app_name"
    android:taskAffinity="com.jp.co.atori.A12022411A.FSDMainLauncherActivity.viewer"
    android:permission="com.smartebook.android.fsdreader.permission"
    android:theme="@android:style/Theme.NoTitleBar" >
    <intent-filter>
        <action android:name="FSDREADERAPPLICATION" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/*" />
    </intent-filter>
</activity>

【问题讨论】:

  • 将您的活动类别设为启动器:
  • 如果评论冒犯了任何人,我很抱歉。我的解决方案已经在答案中,并且已经被赞成。但至于这个问题,它真的没有被研究过,我不妨说还不够。 SO 并不适用于所有琐碎的问题。我的意思是看起来 OP 对这两个应用程序都有代码,那么为什么不简单地合并它们。这真的是一个问题还是缺乏努力。
  • 是的,可能是缺乏努力,也可能是缺乏时间。

标签: android apk


【解决方案1】:

您可以简单地将所有内容打包为一个应用程序 (APK),并提供 2 个单独的启动器,一个用于阅读器,一个用于查看器。您的清单将如下所示:

    <activity
        android:name=".ViewerActivity"
        android:icon="@drawable/viewer_logo"
        android:label="@string/viewer_activity_title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".ReaderActivity"
        android:taskAffinity="com.yourapp.reader"
        android:icon="@drawable/reader_logo"
        android:label="@string/reader_activity_title" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

因此,在用户安装您的应用后,他们将看到 2 个应用图标:一个将您带到您的阅读器,一个将您带到您的查看器。这些是同一个应用的 2 个入口点(但在用户看来它们是 2 个不同的应用)。

【讨论】:

  • 当我尝试启动查看器时,会出现“使用完成操作”1)应用程序和 2)查看器的警报。当我单击查看器时,它工作正常,但是当我单击应用程序时,应用程序崩溃,因为它不能用于阅读书籍。你能帮我把它去掉吗?我不知道它为什么会来。
  • 嗯。听到这个警报我很惊讶。我有一个带有 2 个启动器的类似应用程序,但我没有收到这样的警报。我能看到的唯一区别是我使用以下属性定义了我的一个活动:android:launchMode="singleTop"。我怀疑这会解决它。
  • 能否请您发布清单的内容?至于崩溃,我建议您检查 LogCat 输出或调试应用程序以获取更多详细信息。
  • 实际上,经过仔细观察,我发现了一个更重要的细节。我的一个启动器有一个“android:taskAffinity”属性,为该活动命名一个单独的任务。我在上面编辑了我的答案以包括这个。可能值得一试。
  • 我已经发布了我的清单和异常。请您检查一下,如果有任何错误,请告诉我。
【解决方案2】:

当用户安装一个应用程序时,在它第一次启动时,您可以简单地检查另一个应用程序是否安装在设备上。请参阅此post。如果未安装,您可以为 Play 商店触发 Intent,然后用户安装其他应用。您可以查看this

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多