情况: 我需要将几个应用程序合并到一个.apk应用程序中。让我们说app2到app1
我做了什么: 将app2包复制到我正在使用的主app1项目中,所以我的app1有两个包。
app2有这个清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.app2" android:versionCode="3" android:versionName="1.2">
<application android:label="App2" android:icon="@drawable/icon">
<activity android:name="Activity1" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="Activity2" android:excludeFromRecents="true"></activity>
</application>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
</manifest>
我原来的App1清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.app1">
<application android:icon="@drawable/icon" android:debuggable="true">
<activity android:name=".Start" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.package.app1.PlayerList" />
<activity android:name="com.package.app1.CreateNewPlayer" />
<activity android:name="com.package.app1.Profile" />
<activity android:name="com.package.app1.Braintrainer" />
</application>
</manifest>
app1中的代码我用来调用app2包中的活动:
Intent i = new Intent();
i.setClassName("com.package.app1", "com.package.app2.Activity1");
startActivity(i);
问题: 如何修改app1清单文件以使app2活动。
我尝试过的事情: 如果我在app2中创建简单的HelloWorld测试类,使用相同的代码调用并将其包含在app1清单中,它就可以工作:
<activity android:name="com.package.app2.Test" />
但我无法弄清楚如何将app2清单文件实现到第一个。我尝试的每一种方式都没有错误,但在调用该活动时崩溃。仅App2工作正常,因此问题不在活动文件中。
感谢对此的任何想法。
答案 0 :(得分:3)
Intent i = new Intent();
i.setClassName("com.package.app1", "com.package.app2.Activity1");
startActivity(i);
在黑暗中拍摄:
将com.package.app1
更改为com.package.app2
。我已经完成了你现在正在尝试的事情,并且我总是必须指定我想要调用的类的包。
好的,PackageManager不是你的解决方案,我误读并认为你有两个应用程序,并希望一个应用程序来调用另一个。看起来你只想要一个应用程序。
像这样修改app1的清单:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.package.app1">
<application android:icon="@drawable/icon" android:debuggable="true">
<activity android:name=".Start" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.package.app2.Activity1" />
<activity android:name="com.package.app2.Activity2" android:excludeFromRecents="true"></activity>
<activity android:name="com.package.app1.PlayerList" />
<activity android:name="com.package.app1.CreateNewPlayer" />
<activity android:name="com.package.app1.Profile" />
<activity android:name="com.package.app1.Braintrainer" />
</application>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
</manifest>
再试一次。
答案 1 :(得分:0)
我有几个软件包,需要在我的应用程序中做类似的事情。
你需要小心这种技术,否则你会遇到令人讨厌的内存泄漏。
我在基本控制器(活动)类中将我的活动声明为静态变量。所有控制器类都继承自此类,因此所有控制器类都能够访问它。将活动作为参数传递给需要访问活动的控制器类之外的任何内容。