AIDL based HAL cannot generate java

337 Views Asked by At

I try to use AIDL to implement vendor HAL, but it cannot generate java, below are the Android.bp and aidl files, it cannot compile successfully

please halp me

Android.bp

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

aidl

@VintfStability
interface IWeather{

    String getWeather();

    void setCity(in String city);
}

error

[ 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) ####

I tried disabling Java and it worked fine but I need it now

Android.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,
       },
   },
}

As above, it compiles fine

3

There are 3 best solutions below

0
lashwang On

remove stability and add unstable: 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 On

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

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

The method of markVintfStability is annotated @SystemApi, which means you need to add platform_apis: true into your Android.bp file as below:

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,
       },
   },
}

Note

  1. According to this link, sdk-version used for java backed is system_current, the API markVintfStability will be removed, so the auto-generated java sources cannot be compiled.
  2. According to this link, markVintfStability is used by the auto-generated java sources only when stability is set to vintf, so another choice for you is declaring your aidl_interface as unstable just like other guys mentioned.
0
jingyuan iu On
 aidl_interface {
   name: "android.hardware.weather",
   vendor: true,
   srcs: ["android/hardware/weather/*.aidl"],
   stability: "vintf",
   owner: "jiangc",
   backend: {
       cpp: {
           enabled: false,
       },
      java: {
            enabled: true,
            platform_apis: true,
        },
   },
}