Android-APK内部APK

时间:2019-06-04 22:09:43

标签: android apk

假设我有2个用于我的学校的应用程序:

student.apk::学生登录,检查成绩,检查上课时间,做很多事情。

teacher.apk::教师登录,发布成绩,出勤列表等

是否可以仅创建1个带有登录屏幕的apk,检测它是学生还是教师,而不是正确的apk?

基本上我要问的是我是否可以将这两个apk(学生和老师)放在一个代码(login.apk)中。

应用程序完全不同,要合并成一个应用程序将非常困难,这就是为什么我想在一个简单的“ login.apk”中启动它们的原因。

3 个答案:

答案 0 :(得分:4)

不确定是否可行。但我相信更好的方法是使用动态投放来实现这一目标。将教师和学生捆绑为动态功能模块,并根据登录状态在运行时动态加载它们。

您可以在此处找到更多信息: https://developer.android.com/studio/projects/dynamic-delivery

这里有一个教程: https://medium.com/mindorks/dynamic-feature-modules-the-future-4bee124c0f1

答案 1 :(得分:0)

是的,应该有可能。我还没有测试过。制作第三个应用程序(login.apk),其中包含student.apk和teacher.apk。一旦用户在login.apk中登录,就可以导出/保存正确的子apk 从项目到设备的内部/外部存储(login.apk要求具有读写权限),然后只需打开它即可启动从login.apk导出的apk->软件包安装程序将安装它(需要用户交互)。

答案 2 :(得分:0)

我建议您玩弄意图:这个概念很简单,将登录部分放在两个应用程序之一中(在此示例中,它将是学生应用程序)。 尝试登录时,根据服务器的响应,如果它是学生帐户,则只会登录,否则,如果是教师帐户,则将验证是否安装了教师应用程序。如果已安装,则只需启动它并故意传递所需的参数,否则,请打开Play商店并安装所需的应用。这是该代码:

    try {
        //launch the app if it exists 
        Intent intent = new Intent("teacher app signature here");
        intent.putExtra("some_parameter_name", "parameter value");
    } catch (Exception e) {
        // here is the case where the app is not installed
        Uri marketUri = Uri.parse("market://details?id=teacher app signature here");
        Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
        startActivity(marketIntent);
    }

在教师应用中,您需要拦截此意图及其参数:

    String param= (String) getIntent().getSerializableExtra("some_parameter_name");

然后您可以将所需的变量保存在共享首选项中,以确保用户保持连接状态。