Skip to content

Building

Mert Cobanov edited this page Jul 29, 2026 · 1 revision

Building

Needs Docker (or OrbStack) and a host JDK. No BlackBerry SDK.

git clone https://github.com/cobanov/berryssh
cd berryssh
lib/fetch.sh          # API stubs and ProGuard, from Maven Central
./build.sh            # -> out/berryssh.jad + out/berryssh.jar
spike2/run.sh         # 228 offline vectors

Against a real server, each extra shell adding what a plain container cannot (a fast rekey, an authorised key, a bridge):

docker start bbssh
tools/rekey-server.sh
tools/ws-test-bridge.sh
spike2/against-server.sh

Absent servers print SKIP rather than passing quietly.

Publishing — bump VERSION in build.sh first or the device refuses the install:

./build.sh && gh release create vX.Y.Z out/berryssh.jar out/berryssh.jad

Three things that will bite you

Preverification is mandatory. A merely-compiled jar installs and then fails with 907 Invalid JAR — missing stack map. build.sh handles it with ProGuard's -microedition mode; do not skip it if you build by hand.

The container is not optional. CLDC wants class file version 47 and modern JDKs cannot emit it. Compiling in eclipse-temurin:8-jdk against the CLDC stubs is also what makes the compiler reject anything the device lacks.

-source 1.3 under ssh/src. No generics, no enhanced for, no StringBuilder, no autoboxing, no BigInteger, java.security or javax.crypto. CLDC's java.util.Random also has no nextBytes — the kind of thing you learn from the stubs, not from memory.

Clone this wiki locally