Android - APK 内部 APK

Android - Apk Inside APK

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

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

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

是否可以只创建 1 个带有登录屏幕的 apk,检测它是学生还是老师,然后启动正确的 apk?

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

这些应用程序完全不同,合并起来比合并成一个应用程序更难,这就是为什么我想在一个简单的 "login.apk"

中启动它们

不确定这是否可能。但我相信更好的方法是使用动态交付来实现这一点。将Teacher和Student绑定为动态特性模块,运行时根据登录状态动态加载。

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

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

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

我建议玩弄意图:概念很简单,将登录部分放在两个应用程序之一中(在本例中,它将是学生应用程序)。 尝试登录时,根据服务器的响应,如果是学生帐户,则直接登录,否则,如果是教师帐户,您将验证是否安装了教师应用程序。如果已安装,您只需启动它并在意图中传递所需的参数,否则,打开 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");

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