Android 应用访问Android 系统hide的api

2023-11-13  本文已影响0人  a_simple_coder

在开发中需要调用隐藏的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;
    }
上一篇下一篇

猜你喜欢

热点阅读