Skip to content

Commit b665ae6

Browse files
xaionaro@dx.centerxaionaro@dx.center
authored andcommitted
Fix VersionAwareTransport across codebase, consolidate CI into Makefile
- Fix all 12 examples to use versionaware.NewTransport - Fix servicemanager mock test to implement ResolveCode - Fix API detection to handle both build_flags.json schemas (API 35 "flag_artifacts" and API 36 "flags") - Fix service methods: reverse-lookup knownServiceNames when InterfaceTransaction returns empty - Fix telephony example flags to match generated code - Consolidate CI: move all commands into Makefile targets (test, vet, build, check-generated, release), CI just calls make - Build outputs go to builds/ directory
1 parent 36b0824 commit b665ae6

17 files changed

Lines changed: 167 additions & 49 deletions

File tree

.github/workflows/ci.yml

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,16 @@ jobs:
2424
go-version: ${{ matrix.go-version }}
2525

2626
- name: Unit tests
27-
run: go test -v -race $(go list -e ./tools/pkg/... | grep -v /3rdparty/) ./binder/ ./parcel/
27+
run: make test
2828

2929
- name: Vet
30-
run: go vet $(go list -e ./tools/pkg/... ./tools/... | grep -v /3rdparty/) ./binder/ ./parcel/ ./kernelbinder/ ./servicemanager/ ./errors/
30+
run: make vet
3131

32-
- name: Build commands and tools
33-
run: go build ./tools/cmd/...
34-
35-
- name: Build examples
36-
run: |
37-
for d in examples/*/; do
38-
echo "Building $d..."
39-
go build "./$d"
40-
done
32+
- name: Build
33+
run: make build
4134

4235
- name: Verify generated code is up to date
43-
run: |
44-
make clean
45-
make generate
46-
make smoke
47-
make readme
48-
git diff --exit-code
36+
run: make check-generated
4937

5038
release:
5139
needs: test
@@ -63,15 +51,13 @@ jobs:
6351
with:
6452
go-version: '1.25.x'
6553

66-
- name: Build aidlcli binaries
67-
run: |
68-
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o aidlcli-linux-arm64 ./cmd/aidlcli/
69-
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o aidlcli-linux-amd64 ./cmd/aidlcli/
54+
- name: Build release binaries
55+
run: make release
7056

7157
- name: Create release
7258
uses: softprops/action-gh-release@v2
7359
with:
7460
files: |
75-
aidlcli-linux-arm64
76-
aidlcli-linux-amd64
61+
builds/aidlcli-linux-arm64
62+
builds/aidlcli-linux-amd64
7763
generate_release_notes: true

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
*.test
44
*.out
55
*.prof
6+
/builds/

Makefile

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,39 @@
1-
.PHONY: generate test e2e lint clean readme smoke aidlcli genaidlcli list-commands
1+
.PHONY: generate test e2e vet build build-examples lint clean readme smoke \
2+
aidlcli genaidlcli list-commands check-generated release
23

34
# Generated top-level directories.
45
GENERATED_DIRS := android com fuzztest libgui_test_server parcelables src
56

7+
# All non-3rdparty Go packages.
8+
GO_PACKAGES = $(shell go list -e ./... | grep -v /3rdparty/)
9+
610
# Generate all Go code from AOSP AIDL definitions.
711
generate:
812
go run ./tools/cmd/aospgen -3rdparty tools/pkg/3rdparty -output . -smoke-tests
913

1014
# Run unit tests (compiler + runtime packages).
1115
test:
12-
go test ./tools/pkg/... ./binder/... ./parcel/... ./kernelbinder/... ./servicemanager/... ./errors/...
16+
go test -v -race $(GO_PACKAGES)
1317

14-
# Run E2E tests (requires /dev/binder or mock mode).
18+
# Run E2E tests (requires Android emulator or device).
1519
e2e:
16-
go test -tags e2e ./tests/e2e/... -count=1
20+
go test -tags e2e ./tests/e2e/... -run TestAidlcli -v -timeout 300s
21+
22+
# Run go vet on all packages.
23+
vet:
24+
go vet $(GO_PACKAGES)
25+
26+
# Build all commands, tools, and examples.
27+
build:
28+
go build ./tools/cmd/...
29+
go build ./cmd/...
30+
@for d in examples/*/; do echo "Building $$d..."; go build "./$$d"; done
31+
32+
# Build aidlcli release binaries for arm64 and amd64.
33+
release:
34+
@mkdir -p builds
35+
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o builds/aidlcli-linux-arm64 ./cmd/aidlcli/
36+
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o builds/aidlcli-linux-amd64 ./cmd/aidlcli/
1737

1838
# Run linter.
1939
lint:
@@ -33,12 +53,21 @@ genaidlcli:
3353

3454
# Build the aidlcli tool.
3555
aidlcli:
36-
go build -o aidlcli ./cmd/aidlcli
56+
@mkdir -p builds
57+
go build -o builds/aidlcli ./cmd/aidlcli
3758

3859
# List all available aidlcli subcommands.
3960
list-commands:
4061
go run ./cmd/aidlcli --help 2>&1 | grep '^ ' | awk '{print $$1}'
4162

63+
# Verify generated code matches a clean regeneration.
64+
check-generated:
65+
make clean
66+
make generate
67+
make smoke
68+
make readme
69+
git diff --exit-code
70+
4271
# Remove all generated code.
4372
clean:
4473
rm -rf $(GENERATED_DIRS)

binder/versionaware/apilevel.go

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,26 @@ func detectViaBuildFlags() int {
2929
return 0
3030
}
3131

32-
// buildFlags is the top-level structure of /etc/build_flags.json.
33-
type buildFlags struct {
34-
Flags []buildFlag `json:"flags"`
32+
// buildFlagsFile handles two JSON schemas found on Android devices:
33+
// - API 36+ (Pixel 8a): {"flags": [{"flag_declaration": {...}, "value": {...}}]}
34+
// - API 35 (emulator): {"flag_artifacts": [{"flag_declaration": {...}, "val": {...}}]}
35+
type buildFlagsFile struct {
36+
Flags []buildFlagEntry `json:"flags"`
37+
FlagArtifacts []buildFlagEntry `json:"flag_artifacts"`
3538
}
3639

37-
type buildFlag struct {
40+
type buildFlagEntry struct {
3841
Declaration buildFlagDeclaration `json:"flag_declaration"`
39-
Value buildFlagValue `json:"value"`
42+
// "value" (API 36 schema) or "val" (API 35 schema) — try both.
43+
Value buildFlagVal `json:"value"`
44+
Val buildFlagVal `json:"val"`
4045
}
4146

4247
type buildFlagDeclaration struct {
4348
Name string `json:"name"`
4449
}
4550

46-
type buildFlagValue struct {
51+
type buildFlagVal struct {
4752
Val map[string]json.RawMessage `json:"Val"`
4853
}
4954

@@ -53,19 +58,28 @@ func parseBuildFlags(path string) int {
5358
return 0
5459
}
5560

56-
var flags buildFlags
57-
if err := json.Unmarshal(data, &flags); err != nil {
61+
var file buildFlagsFile
62+
if err := json.Unmarshal(data, &file); err != nil {
5863
return 0
5964
}
6065

61-
for _, f := range flags.Flags {
66+
// Merge both arrays — one will be empty depending on the schema.
67+
entries := append(file.Flags, file.FlagArtifacts...)
68+
69+
for _, f := range entries {
6270
if f.Declaration.Name != "RELEASE_PLATFORM_SDK_VERSION" {
6371
continue
6472
}
73+
74+
// Try "value" field first (API 36 schema), then "val" (API 35 schema).
6575
raw, ok := f.Value.Val["StringValue"]
76+
if !ok {
77+
raw, ok = f.Val.Val["StringValue"]
78+
}
6679
if !ok {
6780
return 0
6881
}
82+
6983
var s string
7084
if err := json.Unmarshal(raw, &s); err != nil {
7185
return 0

examples/activity_manager/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"os"
1313

1414
"github.com/xaionaro-go/aidl/binder"
15+
"github.com/xaionaro-go/aidl/binder/versionaware"
1516
"github.com/xaionaro-go/aidl/android/app"
1617
"github.com/xaionaro-go/aidl/kernelbinder"
1718
"github.com/xaionaro-go/aidl/servicemanager"
@@ -32,7 +33,13 @@ func main() {
3233
}
3334
defer driver.Close(ctx)
3435

35-
sm := servicemanager.New(driver)
36+
transport, err := versionaware.NewTransport(ctx, driver, 0)
37+
if err != nil {
38+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
39+
os.Exit(1)
40+
}
41+
42+
sm := servicemanager.New(transport)
3643

3744
svc, err := sm.GetService(ctx, "activity")
3845
if err != nil {

examples/audio_status/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"os"
1313

1414
"github.com/xaionaro-go/aidl/binder"
15+
"github.com/xaionaro-go/aidl/binder/versionaware"
1516
"github.com/xaionaro-go/aidl/android/media"
1617
"github.com/xaionaro-go/aidl/kernelbinder"
1718
"github.com/xaionaro-go/aidl/servicemanager"
@@ -45,7 +46,13 @@ func main() {
4546
}
4647
defer driver.Close(ctx)
4748

48-
sm := servicemanager.New(driver)
49+
transport, err := versionaware.NewTransport(ctx, driver, 0)
50+
if err != nil {
51+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
52+
os.Exit(1)
53+
}
54+
55+
sm := servicemanager.New(transport)
4956

5057
svc, err := sm.GetService(ctx, "audio")
5158
if err != nil {

examples/battery_health/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"os"
1313

1414
"github.com/xaionaro-go/aidl/binder"
15+
"github.com/xaionaro-go/aidl/binder/versionaware"
1516
"github.com/xaionaro-go/aidl/android/hardware/health"
1617
"github.com/xaionaro-go/aidl/kernelbinder"
1718
"github.com/xaionaro-go/aidl/servicemanager"
@@ -27,7 +28,13 @@ func main() {
2728
}
2829
defer driver.Close(ctx)
2930

30-
sm := servicemanager.New(driver)
31+
transport, err := versionaware.NewTransport(ctx, driver, 0)
32+
if err != nil {
33+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
34+
os.Exit(1)
35+
}
36+
37+
sm := servicemanager.New(transport)
3138

3239
svc, err := sm.GetService(ctx, "android.hardware.health.IHealth/default")
3340
if err != nil {

examples/device_info/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"os"
1414

1515
"github.com/xaionaro-go/aidl/binder"
16+
"github.com/xaionaro-go/aidl/binder/versionaware"
1617
"github.com/xaionaro-go/aidl/android/hardware/input"
1718
"github.com/xaionaro-go/aidl/android/location"
1819
genOs "github.com/xaionaro-go/aidl/android/os"
@@ -31,7 +32,13 @@ func main() {
3132
}
3233
defer driver.Close(ctx)
3334

34-
sm := servicemanager.New(driver)
35+
transport, err := versionaware.NewTransport(ctx, driver, 0)
36+
if err != nil {
37+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
38+
os.Exit(1)
39+
}
40+
41+
sm := servicemanager.New(transport)
3542

3643
// Thermal status
3744
thermalSvc, err := sm.GetService(ctx, "thermalservice")

examples/display_info/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"os"
1313

1414
"github.com/xaionaro-go/aidl/binder"
15+
"github.com/xaionaro-go/aidl/binder/versionaware"
1516
"github.com/xaionaro-go/aidl/android/hardware/display"
1617
"github.com/xaionaro-go/aidl/kernelbinder"
1718
"github.com/xaionaro-go/aidl/servicemanager"
@@ -27,7 +28,13 @@ func main() {
2728
}
2829
defer driver.Close(ctx)
2930

30-
sm := servicemanager.New(driver)
31+
transport, err := versionaware.NewTransport(ctx, driver, 0)
32+
if err != nil {
33+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
34+
os.Exit(1)
35+
}
36+
37+
sm := servicemanager.New(transport)
3138

3239
// Display Manager — display IDs and brightness
3340
svc, err := sm.GetService(ctx, "display")

examples/list_services/main.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"os"
1313

1414
"github.com/xaionaro-go/aidl/binder"
15+
"github.com/xaionaro-go/aidl/binder/versionaware"
1516
"github.com/xaionaro-go/aidl/kernelbinder"
1617
"github.com/xaionaro-go/aidl/servicemanager"
1718
)
@@ -26,7 +27,13 @@ func main() {
2627
}
2728
defer driver.Close(ctx)
2829

29-
sm := servicemanager.New(driver)
30+
transport, err := versionaware.NewTransport(ctx, driver, 0)
31+
if err != nil {
32+
fmt.Fprintf(os.Stderr, "version-aware transport: %v\n", err)
33+
os.Exit(1)
34+
}
35+
36+
sm := servicemanager.New(transport)
3037

3138
services, err := sm.ListServices(ctx)
3239
if err != nil {

0 commit comments

Comments
 (0)