Commit Graph

25 Commits

Author SHA1 Message Date
Max Moiseev
58ebf5f06d Bump NDK version to match the Github runner update 2023-02-13 10:03:45 -08:00
Jordan Rose
5b3d8bb731 Remove Android 19 support 2023-01-26 12:59:06 -08:00
Jordan Rose
3c5f00fffe java: Fix host build / server testing on Windows
- We weren't loading the native library as "signal_jni.dll"
- The Gradle build commands, though still requiring a shell environment,
  shouldn't rely on Unix-style #! lines to execute shell scripts
2022-12-05 11:42:06 -08:00
Jordan Rose
b8ac70227d Android: no need to set ANDROID_NDK_HOME when using Gradle
The Android Gradle plugin already allows you to specify which NDK to
use; we should let the plugin find it for us.
2022-12-05 10:02:54 -08:00
Jordan Rose
98fd87ee9b Android: Add very basic Curve25519 benchmarks 2022-12-02 17:14:06 -08:00
Jordan Rose
572ba1e38b Update Rust to nightly-2022-11-03, and the Android NDK to r25b
These are intertwined: older versions of Rust don't support the newer
NDK, but the newer Rust can't successfully compile BoringSSL against
the older NDK.

This requires a boring-sys update to find the Android NDK sysroot in
the right place.
2022-12-01 12:23:57 -08:00
Jordan Rose
f2f6188593 Android: fix connectedAndroidTests
- Include the same resources that the 'client' project uses
- Desugar newer JDK APIs so we can test on the oldest devices (KitKat)
2022-08-22 12:16:47 -07:00
Jordan Rose
0542686e70 Update artifact/package/module names across all three app languages
- Java: org.whispersystems:signal-client-java ->
    org.signal:libsignal-client
- Java: org.whispersystems:signal-client-android ->
    org.signal:libsignal-android
- Java: org.whispersystems:libsignal-server ->
    org.signal:libsignal-server
- Swift: SignalClient -> LibSignalClient
- NPM: @signalapp/signal-client -> @signalapp/libsignal-client
- Repository: github.com/signalapp/libsignal-client ->
    github.com/signalapp/libsignal
2022-03-23 10:49:09 -07:00
Jordan Rose
a0c1745f8b Java: reorganize package structure
- org.whispersystems.libsignal -> org.signal.libsignal.protocol
- org.whispersystems.libsignal.protocol ->
    org.signal.libsignal.protocol.messages
- org.whispersystems.libsignal.util.AndroidSignalProtocolLogger ->
    org.signal.libsignal.logging.AndroidSignalProtocolLogger
- org.signal.zkgroup -> org.signal.libsignal.zkgroup
- org.signal.devicetransfer -> org.signal.libsignal.devicetransfer
  (test only)
- org.signal.client.internal -> org.signal.libsignal.internal
2022-03-23 10:49:09 -07:00
Jordan Rose
bd30563044 Java: use the artifact name as the human-readable name when publishing
This matches the (explicitly-specified) name in the previous Gradle
configuration.
2022-03-11 13:31:13 -08:00
Jordan Rose
43054913ed Java: Always include Mac and Windows support when publishing
Rather than have a separate "testable" artifact, always include Mac
and Windows versions of libsignal_jni.so when publishing
signal-client-java *and* libsignal_server (though not when just
building locally).

Also, finally attach these tasks to the correct step (processResources
rather than compileJava).
2022-03-10 13:36:26 -08:00
Jordan Rose
821d72d65a Java: add back missing repository information
I deleted this for simplicity when updating to Gradle 7.4 and then
forgot to put it back.
2022-03-10 13:36:26 -08:00
Jordan Rose
7931bf0812 java: Build a separate libsignal-server artifact
Reorganize the Gradle build with three targets:

- signal-client-java (client/)
- signal-client-android (android/)
- libsignal-server (server/)

plus an additional shared/ directory for sources shared between
client/ and server/.

This maintains the distinction between signal-client-java (the Java
parts, plus a Linux libsignal_jni.so for running tests outside of the
Android emulator) and signal-client-android (contains the Android JNI
libraries, plus any Android-specific code, which for now is just
AndroidSignalProtocolLogger, which the app doesn't even use).

The new libsignal-server is built very similarly to
signal-client-java, but only contains the Java sources relevant for
the server...plus the base org.whispersystems.libsignal classes from
the original libsignal-protocol-java, because some of them are
referenced directly in our generated Native.java. (We can improve on
this in the future.) The "testable" artifact that includes macOS and
Windows versions of libsignal_jni.so is now only built for
libsignal-server, not signal-client-java; our Android development
happens on Linux, but server development happens on multiple
platforms.

Tests were recently reorganized into a top-level tests/ directory, but
now there's been another reorganization:

- client/src/test/ - tests to run on any clients
- android/src/androidTest/ - tests to run only on Android devices /
  emulators (currently none)
- server/src/test/ - tests to run specifically for the server
  (currently none)
- shared/test/ - does not exist to avoid running the same tests twice

There are no tests to run "only not on Android devices", and it's
currently assumed that all server functionality is tested by the
client tests. The Android device tests run all the client tests as
well (by direct path reference). This may not be the "best" Gradle
layout, but it's at least straightforward to read the Gradle files.

For now there's still only one native library built for both
signal-client-java and libsignal-server, but that could change in the
future.
2022-03-10 09:14:55 -08:00
Jordan Rose
0b9dffdd88 Java: Update to Gradle 7.4, and several other build system updates
- Switch to the modern maven-publish plugin.

- Bump the Android target SDK version to 30 to match the app.
  (The minimum is still 19.)

- Bump the Java source compatibility version to 1.8.

- Bump the Android command line tools used in Docker to match the app.

- Bump the JDK used in Docker to OpenJDK 11, matching the app.

- Switch to the androidx testing libraries for emulator testing.

- Drop unused trove4j Gradle plugin.

- Lots of cleanup and refactoring.
2022-03-07 16:51:19 -08:00
Jordan Rose
246c4e4fb9 java: Remove "tests" Gradle module
The Java and Android targets are set up to both run common tests in
the top-level tests/ directory, which will be useful if we ever want
tests that only run in the Android emulator, or do *not* run in the
Android emulator. However, that top-level folder doesn't need to be a
Gradle module itself.
2022-03-07 16:51:19 -08:00
Jordan Rose
4173865931 Android: upload unstripped libraries to Maven as well
This allows us to symbolicate native crash traces if necessary.
2021-11-03 16:32:02 -07:00
Jordan Rose
169d4ca156 Gradle: Android tests should be run through Android, not JUnit 2021-10-08 14:58:26 -07:00
Ehren Kret
2a8b4a2d97 Fix gradle build 2021-09-13 15:15:30 -05:00
Jordan Rose
64ee8d34ef Java: add old JUnit as a dependency for the on-Android tests 2020-12-08 14:44:40 -08:00
Jack Lloyd
dd57254f8f Move makefile and docker file into java subdir 2020-11-06 16:40:54 -05:00
Jack Lloyd
383304573c Remove Curve.isNative 2020-11-05 17:59:09 -05:00
Jack Lloyd
d5fd5ddf76 Use a script instead of make for building the JNI native libraries 2020-11-05 17:59:09 -05:00
Jack Lloyd
1037e6735a Rename jars, reset version, switch license 2020-11-05 17:59:09 -05:00
Jack Lloyd
0fbd07ca81 Modify libsignal-protocol-java to use Rust via JNI
Removes device consistency code (unused)
Removes decryption callbacks (unused)
2020-11-05 17:59:09 -05:00
Jack Lloyd
69a4b40423 Import v2.8.1 of libsignal-protocol-java
No changes vs that version in this commit
2020-11-05 17:59:09 -05:00