如何解决AOSP构建中的API Lint错误?

3
我正在使用AOSP源文件。我已经在Android 9中创建了一个新服务,并且它正在运行。当我尝试在Android 11中重用相同的服务时,从自动生成的文件(out文件夹)中获得API Lint错误。
1. IHelloworldService.java:43: 错误:调用系统API的方法应将RemoteException重新抛出为RuntimeException(但不在throws子句中列出)[RethrowRemoteException]
2. IHelloworldService.java:15: 错误:原始AIDL接口不能暴露:Stub扩展Binder [RawAidl]
3. IHelloworldService.java:10: 错误:缺少nullability on method asBinder return [MissingNullability]

错误窗口 我无法尝试终端中发出的内容(方法1不可行,因为是自动生成的文件;方法2不可行,因为提到的文件夹不存在) API-Lint.md 文件 有人能帮我解决这个问题吗?已经卡了很长时间了。

3个回答

2

由于这是系统API,所以您需要添加 /** {@hide} */ 注释来解决此问题,就像这样

package android.service.cfm880;
/** {@hide} */
interface IHelloService{
    void hello(in String name);
}

当前最新的AOSP主分支可以工作


0
首先,看起来你有一个未处理的异常。基本上,你正在使用一个标记为抛出异常的方法,但是在你的代码中没有处理该异常。
第二个建议可能会有所帮助:https://developer.android.com/guide/components/aidl 如果没有看到你的代码,很难给你更多的帮助。
我在尝试解决第三个问题时发现了这个问题。最终我自己解决了它。
任何方法参数引起的投诉,你都需要修改它以包含更多信息。
因此,如果它抱怨foo(Context context)缺少上下文的可空性,你需要找到它并将其修改为以下之一:
public void foo(@NonNull Context context) 

或者

public void foo(@Nullable Context context) 

你的选择将取决于方法foo能否处理上下文为空的情况。

如果它抱怨方法foo()缺少空值性

那么可以将其改为:

@Nullable 
public void foo()

或者

@NonNull 
public void foo()

根据它是否可能返回null。


0

您可以覆盖bp文件。然后添加/覆盖metalava_framework_docs_args部分。

metalava_framework_docs_args = "
"--api-lint-ignore-prefix replace_with_your_class_name_or_prefix "

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接