基于 AIDL 的 HAL 无法生成 java

AIDL based HAL cannot generate java

提问人:Chao Jiang 提问时间:9/12/2023 更新时间:10/7/2023 访问量:102

问:

我尝试使用 AIDL 实现供应商 HAL,但它无法生成 java,下面是 Android.bp 和 aidl 文件,它无法成功编译

请把我打死

安卓.bp

aidl_interface {
   name: "android.hardware.weather",
   vendor: true,
   srcs: ["android/hardware/weather/*.aidl"],
   stability: "vintf",
   owner: "jiangc",
   backend: {
       cpp: {
           enabled: false,
       },
   },
}

艾德尔

@VintfStability
interface IWeather{

    String getWeather();

    void setCity(in String city);
}

错误

[ 45% 5/11] //vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather:android.hardware.weather-V1-java javac [common]
FAILED: out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/android.hardware.weather-V1-java.jar
rm -rf "out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/classes" "out/soong/.intermediates/vendor/jiangc/hardware/
interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/anno" "out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware
.weather-V1-java/android_common/javac/srcjars" "out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/android.hardware.w
eather-V1-java.jar" && mkdir -p "out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/classes" "out/soong/.intermediate
s/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/anno" "out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl
/weather/android.hardware.weather-V1-java/android_common/javac/srcjars" && out/host/linux-x86/bin/zipsync -d out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.har
dware.weather-V1-java/android_common/javac/srcjars -l out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/srcjars/list
 -f "*.java"  && (if [ -s out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/srcjars/list ] || [ -s out/soong/.interm
ediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/android.hardware.weather-V1-java.jar.rsp ] ; then out/host/linux-x86/bin/soong_java
c_wrapper prebuilts/jdk/jdk11/linux-x86/bin/javac -J-Xmx2048M -J-XX:OnError="cat hs_err_pid%p.log" -J-XX:CICompilerCount=6 -J-XX:+UseDynamicNumberOfGCThreads -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -X
maxerrs 9999999 -encoding UTF-8 -sourcepath "" -g -XDskipDuplicateBridges=true -XDstringConcat=inline  -proc:none -Xlint:-dep-ann --system=out/soong/.intermediates/build/soong/java/core-libraries/core-public-stu
bs-system-modules/android_common/system -classpath out/soong/.intermediates/frameworks/base/android_system_stubs_current/android_common/turbine-combined/android_system_stubs_current.jar -source 11 -target 11 -d 
out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/classes -s out/soong/.intermediates/vendor/jiangc/hardware/interfa
ces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/anno @out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather
-V1-java/android_common/javac/android.hardware.weather-V1-java.jar.rsp @out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/
javac/srcjars/list ; fi ) && out/host/linux-x86/bin/soong_zip -jar -o out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/ja
vac/android.hardware.weather-V1-java.jar -C out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/classes -D out/soong/.
intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/classes && rm -rf "out/soong/.intermediates/vendor/jiangc/hardware/interfaces
/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java/android_common/javac/srcjars"
out/soong/.intermediates/vendor/jiangc/hardware/interfaces/automotive/vehicle/aidl/weather/android.hardware.weather-V1-java-source/gen/android/hardware/weather/IWeather.java:46: error: cannot find symbol
      this.markVintfStability();
          ^
  symbol: method markVintfStability()
1 error
16:18:59 ninja failed with: exit status 1

#### failed to build some targets (15 seconds) ####

我尝试禁用 Java,它工作正常,但我现在需要它

安卓.bp

aidl_interface {
   name: "android.hardware.weather",
   vendor: true,
   srcs: ["android/hardware/weather/*.aidl"],
   stability: "vintf",
   owner: "jiangc",
   backend: {
       cpp: {
           enabled: false,
       },
       java: {
           enabled: false,
       },
   },
}

如上所述,它编译良好

Android 框架 aidl hal

评论

0赞 Community 9/13/2023
请编辑问题,将其限制在特定问题上,并具有足够的细节以确定适当的答案。
0赞 Vaibhav S 10/5/2023
@Chao 江,你解决了编译问题吗?

答:

0赞 lashwang 10/7/2023 #1

删除稳定性并添加不稳定:true

aidl_interface {
   name: "android.hardware.weather",
   unstable: true
   vendor: true,
   srcs: ["android/hardware/weather/*.aidl"],
   stability: "vintf",
   owner: "jiangc",
   backend: {
       cpp: {
           enabled: false,
       },
   },
}
0赞 tonykwok 11/29/2023 #2

在:frameworks/base/core/java/android/os/Binder.java

public class Binder implements IBinder {
    ...
    @SystemApi(client = SystemApi.Client.PRIVILEGED_APPS)
    public final native void markVintfStability();
    ...
}

的方法被注释,这意味着您需要添加到您的文件中,如下所示:markVintfStability@SystemApiplatform_apis: trueAndroid.bp

aidl_interface {
   name: "android.hardware.weather",
   vendor: true,
   srcs: ["android/hardware/weather/*.aidl"],
   stability: "vintf",
   owner: "jiangc",
   backend: {
       java: {
           platform_apis: true,
       },
       cpp: {
           enabled: false,
       },
   },
}

注意

  1. 根据这个链接,用于 backed is ,API 将被删除,因此无法编译自动生成的 java 源代码。sdk-versionjavasystem_currentmarkVintfStability
  2. 根据此链接,仅当设置为 时,才会由自动生成的源使用,因此您的另一个选择是声明您的就像提到的其他人一样。markVintfStabilityjavastabilityvintfaidl_interfaceunstable