gpt4 book ai didi

android - 如何从 Android Studio 为特定版本的 AOSP 开发应用程序?

转载 作者:行者123 更新时间:2023-11-29 16:33:24 39 4
gpt4 key购买 nike

我当前的手机 (Pixel 2 XL) 运行的是 PQ1A.181105.017.A1 版本。根据source.android.com ,这意味着它是从分支 android-9.0.0_r16 构建的。查看来自该特定分支的源文件,例如 SignalStrength.java ,有一个名为 getWcdmaRscp() 的公共(public)方法。但是,此方法似乎是在 SDK 版本 28 发布后添加的,因此如果我尝试在 Android Studio 中以 28 为目标时从我的应用调用它,它不会构建。

我猜我的手机很乐意允许我调用有问题的方法,那么我该如何设置我的 Android Studio 以便能够针对该版本的框架进行构建?

看来我需要一个新的 framework.jar,但我在哪里可以找到它?请不要告诉我需要在本地下载和构建整个 AOSP。

最佳答案

我怀疑它是在 API 28 发布后添加的。它用 @hide 注释,这意味着,当构建 SDK 时,它并没有内置。它仍然在框架本身中,但 Android Studio 不知道这一点。

要解决这个问题,您必须使用反射。像这样的东西:

try {
Method getWcdmaRscp = SignalStrength.class.getMethod("getWcdmaRscp");
int rscp = Integer.parseInt(getWcdmaRscp.invoke(signalStrength).toString()); //signalStrength is the instance you have
} catch (Exception ignored) {}

但是,这可能行不通。 Android Pie 引入了对访问隐藏方法和类的限制。在 Oreo 中,你可以只使用反射。在 Pie 中,您尝试访问的大多数类都会抛出 ClassNotFoundNoSuchMethodError 异常,因为系统会阻止第三方应用程序访问它们。某些隐藏的 API 仍然可以访问,但没有确定的列表。

关于android - 如何从 Android Studio 为特定版本的 AOSP 开发应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53351449/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com