Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Build instructions

From the unofficial Signal Wiki

There are several websites showing how to build Signal from source. This will become a list of links and also pages with instructions for different plattforms and operating systems.

Official instructions[edit | edit source]

The not very detailed and outdated (you need java 11 not java 8) official developer instructions on Github can be found here: Github-repo of the developers

A subcategory of that are the reproducible builds, which should be equivalent to the builds that can be obtained from the different App stores or the Signal website: Github-repo of the developers

Signal for Android[edit | edit source]

Build on Debian[edit | edit source]

Debian via command line in the terminal without Android Studio.

There are also instructions from user anon61006462 that explain, how to change the app name and the icon color to be able to install the self built version side by side to the original version.

You have to change two lines of the instructions to the following lines (variable names were changed):

ANDROID_API_LEVELS=android-$(grep COMPILE_SDK_VERSION ~/Signal-Android/build-logic/plugins/src/main/java/android-constants.gradle|sed "s/[ a-zA-Z='_]//g")
ANDROID_BUILD_TOOLS_VERSION=$(grep BUILD_TOOLS_VERSION ~/Signal-Android/build-logic/plugins/src/main/java/android-constants.gradle|sed "s/[ a-zA-Z='_]//g")

Build on Fedora[edit | edit source]

TODO, still not compiling

Different name of application[edit | edit source]

To not mix your self built (possibly patched) version of Signal with the original one, you could change it’s name. In the file app/src/main/res/values/strings.xml change the line with the app_name to something different, for example:

<string name="app_name" translatable="false">Supersignal</string>

Second instance of Signal[edit | edit source]

If you want to install a second instance of Signal (with some tests, patches, feature flags changed) you have to change the applicationId to a different value (than the original one). To do so, add a line beginning with applicationId to the file app/build.gradle

      defaultConfig {
          applicationId = "org.blabla.mysignal"
          versionCode = canonicalVersionCode * postFixSize
          versionName = canonicalVersionName

Different Icon[edit | edit source]

Easiest way of having a non standard (blue) icon is to compile a nightly-build

$ ./gradlew clean assemblenightlyProdRelease

Change Feature Flags[edit | edit source]

If you want to try some features that are deactivated by default (because probably not yet ready to use) you can turn them on or off by setting them to true or false.

To see all available feature flags, open the file app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java. Search for public final class FeatureFlags. Below that you will see 57 lines (that was at 2023-04-29) of the following form

private static final String TEXT_FORMATTING_SPOILER_SEND      = "android.textFormatting.spoilerSend";

The capitalized variable names (in this example TEXT_FORMATTING_SPOILER_SEND) can be set to true or false. If you search for that capitalized variable names in the file you will find their default values, for example the following one has false as default

public static boolean textFormattingSpoilerSend() {
    return getBoolean(TEXT_FORMATTING_SPOILER_SEND, false);
}

If you want to change that value, you need to search for

static final Map<String, Object> FORCED_VALUES = new HashMap<String, Object>() {{                                               
}};

and put the new values inside the double curly braces. For example (here three values are changed)

static final Map<String, Object> FORCED_VALUES = new HashMap<String, Object>() {{
    put(TEXT_FORMATTING, true);
    put(TEXT_FORMATTING_SPOILER_SEND, true);
    put(CALLS_TAB, true);
}};

That is it. Expect things not to work, Signal to crash, unexpected behaviour, as these Features Flags are mostly off, because they don’t work properly yet.

Signal for iOS[edit | edit source]

See Build instructions/Signal iOS.

Signal for Desktop[edit | edit source]

Linux[edit | edit source]

Mac OSX[edit | edit source]

TODO

Windows[edit | edit source]

TODO

Cookies help us deliver our services. By using our services, you agree to our use of cookies.