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,576.00 µs
Commit add f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
725.66 µs
Commit add f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
4,248.70 µs
Commit add f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
7,713.20 µs
Commit add f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
11,747.00 µs
Commit add f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
14,932.00 µs
Commit add f(number clients)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
990,970.00 µs
Commit add f(number clients)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
702.51 µs
Commit add f(number clients)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
80,046.00 µs
Commit add f(number clients)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
216,180.00 µs
Commit add f(number clients)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
423,570.00 µs
Commit add f(number clients)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
672,790.00 µs
Commit pending proposals f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
116,010.00 µs
Commit pending proposals f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
22,930.00 µs
Commit pending proposals f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
43,021.00 µs
Commit pending proposals f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
57,751.00 µs
Commit pending proposals f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
77,368.00 µs
Commit pending proposals f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
92,974.00 µs
Commit pending proposals f(pending size)/cs1/mem/1📈 view plot
⚠️ NO THRESHOLD
17,234.00 µs
Commit pending proposals f(pending size)/cs1/mem/101📈 view plot
⚠️ NO THRESHOLD
114,850.00 µs
Commit pending proposals f(pending size)/cs1/mem/21📈 view plot
⚠️ NO THRESHOLD
34,493.00 µs
Commit pending proposals f(pending size)/cs1/mem/41📈 view plot
⚠️ NO THRESHOLD
55,575.00 µs
Commit pending proposals f(pending size)/cs1/mem/61📈 view plot
⚠️ NO THRESHOLD
75,296.00 µs
Commit pending proposals f(pending size)/cs1/mem/81📈 view plot
⚠️ NO THRESHOLD
94,904.00 µs
Commit remove f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
10,503.00 µs
Commit remove f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
570.04 µs
Commit remove f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
2,236.60 µs
Commit remove f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
3,986.30 µs
Commit remove f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
6,292.20 µs
Commit remove f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
7,929.90 µs
Commit remove f(number clients)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
13,665.00 µs
Commit remove f(number clients)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
134,660.00 µs
Commit remove f(number clients)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
110,880.00 µs
Commit remove f(number clients)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
86,489.00 µs
Commit remove f(number clients)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
61,913.00 µs
Commit remove f(number clients)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
37,886.00 µs
Commit update f(group size)/cs1/mem/1002📈 view plot
⚠️ NO THRESHOLD
134,380.00 µs
Commit update f(group size)/cs1/mem/2📈 view plot
⚠️ NO THRESHOLD
730.97 µs
Commit update f(group size)/cs1/mem/202📈 view plot
⚠️ NO THRESHOLD
27,820.00 µs
Commit update f(group size)/cs1/mem/402📈 view plot
⚠️ NO THRESHOLD
54,783.00 µs
Commit update f(group size)/cs1/mem/602📈 view plot
⚠️ NO THRESHOLD
82,653.00 µs
Commit update f(group size)/cs1/mem/802📈 view plot
⚠️ NO THRESHOLD
108,720.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 typfel force-pushed the feat/android-interop branch 2 times, most recently 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.

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.

Looks great, thanks!

@typfel typfel force-pushed the feat/android-interop branch from 1331341 to 4c0988e Compare January 8, 2026 21:44
@typfel typfel force-pushed the feat/android-interop branch from 4c0988e to 6bbfa66 Compare January 8, 2026 22:17
typfel added 9 commits January 8, 2026 23:28
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 6bbfa66 to 50aaa15 Compare January 8, 2026 22:28
@typfel typfel merged commit 50aaa15 into main Jan 8, 2026
54 checks passed
@typfel typfel deleted the feat/android-interop branch January 8, 2026 22:39
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