美文网首页
Android 应用访问Android 系统hide的api

Android 应用访问Android 系统hide的api

作者: a_simple_coder | 来源:发表于2023-11-13 10:38 被阅读0次

    在开发中需要调用隐藏的API,这需求咱们引入包含被隐藏 API 的 jar 包。

    一、生成 framework.jar

    生成步骤可参考:
    写给应用开发的 Android Framework 教程——玩转 AOSP 之使用 Android Studio 开发系统 App
    Android 7.1.1 Framework 修改记录(五) 增加全局事件API供上层应用调用

    二、集成

    注意:网上看将 framework.jar 放到 app/libs 目录下,修改app/build.gradle
    这里要注意,如果你的代码是在library module中引用 framework.jar,就要将 framework.jar放到 library module/libs目录下,并修改library module /build.gradle

    这里我的代码是在 library 的module中,所以:
    2.1、把之前准备好的 framework.jar 拷贝到项目的 library module/libs 文件夹中。
    如下所示:

    framework.jar的存放位置.png

    2.2、接着修正项目根目录下的 build.gradle,增加如下内容:

    allprojects {
        gradle.projectsEvaluated {
            tasks.withType(JavaCompile).tap {
                configureEach {
                    Set<File> fileSet
                    if (options.bootstrapClasspath != null) {
                        fileSet = options.bootstrapClasspath.getFiles()
                    } else {
                        fileSet = new HashSet<>()
                    }
                    List<File> newFileList = new ArrayList<>();
                    newFileList.add(new File("./libs/framework.jar"))
                    newFileList.addAll(fileSet)
                    options.bootstrapClasspath = files(
                            newFileList.toArray()
                    )
                }
            }
        }
    

    2.3、修改library module 的 build.gradle

    repositories{
        flatDir {
            dirs "libs"
        }
    }
    dependencies {
        compileOnly files("libs/framework.jar")
    }
    
    

    然后在java中可以使用hide 的 api 了:

        private static ComponentName getTopActivity(int displayId) {
            try {
                List<ActivityTaskManager.RootTaskInfo> stackInforms = ActivityTaskManager.getService().getAllRootTaskInfosOnDisplay(displayId);
                for (int i = 0; i < stackInforms.size(); ++i) {
                    ActivityTaskManager.RootTaskInfo info = (ActivityTaskManager.RootTaskInfo) stackInforms.get(i);
                    if (null != info) {
                        Log.d(TAG, "displayId=====>" + displayId + " RootTaskInfo=====>" + info);
                        return info.topActivity;
                    }
                }
            } catch (Exception e) {
                Log.e(TAG, "getTopActivity has Exception:" + e.getMessage());
            }
            Log.d(TAG, "getTopActivity failed");
            return null;
        }
    

    相关文章

      网友评论

          本文标题:Android 应用访问Android 系统hide的api

          本文链接:https://www.haomeiwen.com/subject/sfmrwdtx.html