About this project

Linphone is an open source softphone for voice and video over IP calling and instant messaging. It is fully SIP-based, covering calling, presence and IM features. This repository is the Linphone.org mirror of linphone-android; the canonical development location is the Belledonne Communications GitLab instance. The app is available on Google Play and F-Droid, and APKs signed with the project key can be downloaded from the Linphone website. The 6.0.0 release is a complete rewrite designed with UX/UI experts, bringing improved fluidity, real multi-account support and asymmetrical video in calls. It requires Android 9.0 or newer. A CHANGELOG.md file lists changes and new features. Licensing is dual: GNU/GPLv3 for free open source use, or a proprietary license for a fee for closed source applications, with Belledonne Communications handling cost and service questions. Documentation links cover supported features and RFCs, the public wiki, and Kotlin tutorials for Android. Building: with Android Studio, open the project, wait for Gradle synchronization, then build or install; the linphone library is fetched from the project Maven repository as an AAR. Without Android Studio, use ./gradlew assembleDebug or assembleRelease, then installDebug or installRelease. APKs land in app/build/outputs/apk/debug/ and app/build/outputs/apk/release/. For a release AppBundle use the releaseAppBundle target, and ensure an NDK is installed with ANDROID_NDK_HOME set so native library symbols can be included for the Play Store. Building a local SDK involves cloning linphone-sdk recursively from GitLab, following its README to build, adding the absolute SDK build path as LinphoneSdkBuildDir in gradle.properties under GRADLE_USER_HOME, and rebuilding the app. Native debugging uses LLDB from Android Studio SDK Tools, selecting Dual or Native in the debugger configuration, adding the path to linphone-sdk debug libraries, setting breakpoints in native files, and using the debug AAR in app/build.gradle. Known issues include an AAPT resource error for linphone_logo_tinted, resolved by deleting app/src/main/res/xml/contacts.xml and rebuilding; a libc++_shared.so crash at startup, resolved by cleaning the project and checking the SDK was built for the right CPU architecture via the LINPHONESDK_ANDROID_ARCHS cmake parameter; and push notifications not working when the app was started by Android Studio after an install, resolved by removing the app from recent activities and relaunching from the launcher icon. Troubleshooting: behavior issues should be reported on the GitHub repository using the template with matching library logs. Since 6.0.0, logs are always enabled and stored locally, and can be cleared or securely uploaded via Help then Troubleshooting. For native crashes, symbolized stack traces require debug libraries, obtainable by building the SDK locally or downloading the libs-debug archive matching the SDK version from the Maven repository. The ndk-stack tool, and possibly adb logcat, are needed; the architecture of the libraries must be known. Commands are given for symbolizing a stack trace from a connected device, with or without knowing the CPU architecture, and NDK r29 allows using the libs-debug.zip directly. Custom package names are set by editing the packageName variable in app/build.gradle.kts, with manifestPlaceholders applying it everywhere. A useDifferentPackageNameForDebugBuild flag can restore the org.linphone.debug package for debug builds. A processDebugGoogleServices failure about no matching client means app/google-services.json must be replaced with one for the chosen package name, or deleted if Firebase Cloud Messaging and Crashlytics are not used. Firebase is the only official push notification path since Google Cloud Messaging was deprecated; the project archives its own google-services.json so builds can still receive push notifications from the free sip.linphone.org service, and deleting it disables push notifications. A custom push server requires replacing that file. Translations moved from Transifex to a self-hosted Weblate instance; previous translations could not be reused after the rewrite, so contributions are welcome. Contributions require patches against the latest git sources and a completed Contributor Agreement sent by email with the pull request link, granting the project peaceful exercise of rights on the source code while the contributor keeps rights on their contribution.