Skip to content

Conversation

@typfel
Copy link
Member

@typfel typfel commented Dec 3, 2025

What's new in this PR


PR Submission Checklist for internal contributors
  • The PR Title
    • conforms to the style of semantic commits messages¹ supported in Wire's Github Workflow²
    • contains a reference JIRA issue number like SQPIT-764
    • answers the question: If merged, this PR will: ... ³
  1. https://sparkbox.com/foundry/semantic_commit_messages
  2. https://github.com/wireapp/.github#usage
  3. E.g. feat(conversation-list): Sort conversations by most emojis in the title #SQPIT-764.

@typfel typfel requested a review from a team December 3, 2025 10:06
@github-actions
Copy link

github-actions bot commented Dec 3, 2025

🐰 Bencher Report

Branchfeat/android-interop
Testbedubuntu-latest

⚠️ WARNING: No Threshold found!

Without a Threshold, no Alerts will ever be generated.

Click here to create a new Threshold
For more information, see the Threshold documentation.
To only post results if a Threshold exists, set the --ci-only-thresholds flag.

Click to view all benchmark results
BenchmarkLatencymicroseconds (µs)
Commit add f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
17,677.00 µs
Commit add f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
763.72 µs
Commit add f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
4,312.60 µs
Commit add f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
7,739.10 µs
Commit add f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
11,973.00 µs
Commit add f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
14,578.00 µs
Commit add f(number clients)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
984,910.00 µs
Commit add f(number clients)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
734.08 µs
Commit add f(number clients)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
79,291.00 µs
Commit add f(number clients)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
215,950.00 µs
Commit add f(number clients)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
424,380.00 µs
Commit add f(number clients)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
677,150.00 µs
Commit pending proposals f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
116,130.00 µs
Commit pending proposals f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
23,092.00 µs
Commit pending proposals f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
41,728.00 µs
Commit pending proposals f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
57,531.00 µs
Commit pending proposals f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
77,411.00 µs
Commit pending proposals f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
93,239.00 µs
Commit pending proposals f(pending size)/cs1/mem/1📈 view plot
⚠️ NO THRESHOLD
17,238.00 µs
Commit pending proposals f(pending size)/cs1/mem/101📈 view plot
⚠️ NO THRESHOLD
114,520.00 µs
Commit pending proposals f(pending size)/cs1/mem/21📈 view plot
⚠️ NO THRESHOLD
34,656.00 µs
Commit pending proposals f(pending size)/cs1/mem/41📈 view plot
⚠️ NO THRESHOLD
56,193.00 µs
Commit pending proposals f(pending size)/cs1/mem/61📈 view plot
⚠️ NO THRESHOLD
75,618.00 µs
Commit pending proposals f(pending size)/cs1/mem/81📈 view plot
⚠️ NO THRESHOLD
95,349.00 µs
Commit remove f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
10,792.00 µs
Commit remove f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
573.23 µs
Commit remove f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
2,251.60 µs
Commit remove f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
4,097.00 µs
Commit remove f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
6,319.80 µs
Commit remove f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
8,353.20 µs
Commit remove f(number clients)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
14,002.00 µs
Commit remove f(number clients)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
135,800.00 µs
Commit remove f(number clients)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
111,580.00 µs
Commit remove f(number clients)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
87,539.00 µs
Commit remove f(number clients)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
62,513.00 µs
Commit remove f(number clients)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
38,116.00 µs
Commit update f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
135,310.00 µs
Commit update f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
782.70 µs
Commit update f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
28,184.00 µs
Commit update f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
55,062.00 µs
Commit update f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
83,147.00 µs
Commit update f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
109,100.00 µs
🐰 View full continuous benchmarking report in Bencher

@typfel typfel force-pushed the feat/android-interop branch 14 times, most recently from db8ff8c to fe45bc1 Compare December 5, 2025 14:51
@fewerner
Copy link
Contributor

fewerner commented Dec 8, 2025

8debb0b appears to be empty

Copy link
Contributor

@fewerner fewerner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great job! I think my main concern is the CI runtime. We should think about testing ios and android separately and in parallel. This would save time in setup and test run and have clear CI dependencies.

@istankovic
Copy link
Member

Nice commit sequencing and commit messages! 💜

@istankovic
Copy link
Member

istankovic commented Dec 8, 2025

Shouldn't we add all the android-interop files under interop, not crypto-ffi?

interop/
├── Cargo.toml
├── README.md
└── src
    ├── clients
    │   ├── corecrypto
    │   │   ├── android.rs
    │   │   ├── ffi.rs
    │   │   ├── ios.rs
    │   │   ├── mod.rs
    │   │   ├── native.rs
    │   │   └── web
    │   │       ├── mls.ts
    │   │       ├── mod.rs
    │   │       ├── populate.sh
    │   │       └── proteus.ts
    │   ├── InteropClient
    │   │   ├── install-interop-client.sh
    │   │   ├── InteropClient
    │   │   │   ├── Assets.xcassets
    │   │   │   │   ├── AccentColor.colorset
    │   │   │   │   │   └── Contents.json
    │   │   │   │   ├── AppIcon.appiconset
    │   │   │   │   │   └── Contents.json
    │   │   │   │   └── Contents.json
    │   │   │   ├── ContentView.swift
    │   │   │   ├── Info.plist
    │   │   │   ├── InteropAction.swift
    │   │   │   ├── InteropClientApp.swift
    │   │   │   └── Preview Content
    │   │   │       └── Preview Assets.xcassets
    │   │   │           └── Contents.json
    │   │   └── InteropClient.xcodeproj
    │   │       ├── project.pbxproj
    │   │       └── project.xcworkspace
    │   │           └── contents.xcworkspacedata
    │   └── mod.rs
    ├── main.rs
    └── util.rs

We already have Swift interop client here so it would make sense to have Android too.

@istankovic
Copy link
Member

There's a warning in https://github.com/wireapp/core-crypto/actions/runs/19966647475/job/57260303169:

> Task :android-interop:processReleaseMainManifest
/Users/cc-ghrunner-1/runner/work/core-crypto/core-crypto/crypto-ffi/bindings/android-interop/src/main/AndroidManifest.xml:18:17-75 Warning:
	Element category#android.intent.category.DEFAULT at AndroidManifest.xml:18:17-75 duplicated with element declared at AndroidManifest.xml:16:17-75

@typfel
Copy link
Member Author

typfel commented Dec 8, 2025

Shouldn't we add all the android-interop files under interop, not crypto-ffi?

interop/
├── Cargo.toml
├── README.md
└── src
    ├── clients
    │   ├── corecrypto
    │   │   ├── android.rs
    │   │   ├── ffi.rs
    │   │   ├── ios.rs
    │   │   ├── mod.rs
    │   │   ├── native.rs
    │   │   └── web
    │   │       ├── mls.ts
    │   │       ├── mod.rs
    │   │       ├── populate.sh
    │   │       └── proteus.ts
    │   ├── InteropClient
    │   │   ├── install-interop-client.sh
    │   │   ├── InteropClient
    │   │   │   ├── Assets.xcassets
    │   │   │   │   ├── AccentColor.colorset
    │   │   │   │   │   └── Contents.json
    │   │   │   │   ├── AppIcon.appiconset
    │   │   │   │   │   └── Contents.json
    │   │   │   │   └── Contents.json
    │   │   │   ├── ContentView.swift
    │   │   │   ├── Info.plist
    │   │   │   ├── InteropAction.swift
    │   │   │   ├── InteropClientApp.swift
    │   │   │   └── Preview Content
    │   │   │       └── Preview Assets.xcassets
    │   │   │           └── Contents.json
    │   │   └── InteropClient.xcodeproj
    │   │       ├── project.pbxproj
    │   │       └── project.xcworkspace
    │   │           └── contents.xcworkspacedata
    │   └── mod.rs
    ├── main.rs
    └── util.rs

We already have Swift interop client here so it would make sense to have Android too.

I had it in the interop directory initially but that doesn't very well when I want to include the core crypto bindings as a project dependency, it needs to be in the same gradle project (crypto-ffi/bindings).

My plan is to also move the iOS and web interop clients to the bindings directory.

@istankovic
Copy link
Member

I had it in the interop directory initially but that doesn't very well when I want to include the core crypto bindings as a project dependency, it needs to be in the same gradle project (crypto-ffi/bindings).

That is surprising. Doesn't gradle support path dependencies?

My plan is to also move the iOS and web interop clients to the bindings directory.

I would rather not we do that. I think we should retain a clear separation between bindings and interop.

@istankovic
Copy link
Member

Running cargo run --bin interop results in a stuck process on my machine:
Screenshot_20251208_135511

@typfel
Copy link
Member Author

typfel commented Dec 8, 2025

8debb0b appears to be empty

it was accidently moved to 19da4bb

I'll split it up again.

@typfel
Copy link
Member Author

typfel commented Dec 8, 2025

Running cargo run --bin interop results in a stuck process on my machine: Screenshot_20251208_135511

Running the interop currently assumes the android emulator and the iOS emulator is already running.

@typfel typfel force-pushed the feat/android-interop branch from 7a9475f to 1709179 Compare December 8, 2025 13:39
Copy link
Member

@istankovic istankovic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good start, but it still needs more work. In particular, we should keep the interop code separate from the bindings.

typfel added 14 commits January 7, 2026 15:40
The application follows the same structure as the iOS interop application. Interop commands
are sent via intents and the result is printed to stdout / logcat.
As future work it might make sense to merge the ios and android rust clients
with separate drivers which abstracts the platform specific communication.
When I run `make android` on a macOS system I don't want to build dylib libraries because
android always uses .so libraries.
The checkout step resets the target folder making it impossible to combine
this action with other actions which download something into the target
folder.
@typfel typfel force-pushed the feat/android-interop branch from 0ccbe09 to 6fda103 Compare January 7, 2026 14:54
@typfel typfel force-pushed the feat/android-interop branch from 6fda103 to bd2d649 Compare January 7, 2026 15:25
@typfel typfel requested a review from istankovic January 7, 2026 16:15
@typfel
Copy link
Member Author

typfel commented Jan 7, 2026

Alright, I think I resolved all open issues @istankovic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants