No Description

Peter Cai 65775c1d06 Delete old (and useless) compatibility checks 6 months ago
.forgejo 21c04ed179 Allow Actions to build from any branch 7 months ago
.idea 360760b78f chore: Upgrade Android Studio and Gradle 10 months ago
app 6c774450ec fix: usb isd-r aid fallback (#188) 10 months ago
app-common 6d43a9207c chore: simplify pretty print json string (#201) 6 months ago
app-deps 90878438f9 refactor: gitignore (#69) 1 year ago
app-unpriv 65775c1d06 Delete old (and useless) compatibility checks 6 months ago
art 17aebc2c73 README: Use HTML and SVG to size the logo properly 1 year ago
buildSrc 90878438f9 refactor: gitignore (#69) 1 year ago
gradle 360760b78f chore: Upgrade Android Studio and Gradle 10 months ago
libs 149a19ca1c fix: build warning (#194) 7 months ago
.gitignore 90878438f9 refactor: gitignore (#69) 1 year ago
.gitmodules 85af3bcfc0 refactor: [1/n] Introduce the lpac project and lpac_jni 2 years ago
Android.bp a53ff97ecc Android.bp: Fix building on AOSP 14 (finally) 2 years ago
LICENSE 70f20f9de8 OpenEUICC is now GPLv3 only 1 year ago
README.md eaef00b88a Fixup README 8 months ago
build.gradle.kts 50c7b4a3be refactor: Migrate to build.gradle.kts 2 years ago
gradle.properties 562e5922be chore: suppress gradle warning (#75) 1 year ago
gradlew 360760b78f chore: Upgrade Android Studio and Gradle 10 months ago
gradlew.bat 360760b78f chore: Upgrade Android Studio and Gradle 10 months ago
privapp_whitelist_im.angry.openeuicc.xml 3add3ffa90 refactor: Launch profile download task inside EuiccChannelManagerService 1 year ago
settings.gradle.kts b580193624 Generate Android.bp and dependencies with LineageOS's GenerateBp plugin 2 years ago

README.md

A fully free and open-source Local Profile Assistant implementation for Android devices.

There are two variants of this project, OpenEUICC and EasyEUICC:

OpenEUICC EasyEUICC
Privileged Must be installed as system app No
Internal eSIM Supported Unsupported
External (Removable) eSIM Supported Supported
USB Readers Supported Supported
Requires allowlisting by eSIM No Yes -- except USB
System Integration Partial (carrier partner API unimplemented yet) No

Some side notes:

  1. When privileged, OpenEUICC supports any eUICC chip that implements the SGP.22 standard, internal or external. However, there is no guarantee that external (removable) eSIMs actually follow the standard. Please DO NOT submit bug reports for non-functioning removable eSIMs. They are NOT officially supported unless they also support / are supported by EasyEUICC, the unprivileged variant.
  2. Both variants support accessing eUICC chips through USB CCID readers, regardless of whether the chip contains the correct ARA-M hash to allow for unprivileged access. However, only T=0 readers that use the standard USB CCID protocol are supported.
  3. Prebuilt release-mode EasyEUICC apks can be downloaded here. For OpenEUICC, no official release is currently provided and only debug mode APKs can be found in the CI page.
  4. For removable eSIM chip vendors: to have your chip supported by official builds of EasyEUICC when inserted, include the ARA-M hash 2A2FA878BC7C3354C2CF82935A5945A3EDAE4AFA.

This project is Free Software licensed under GNU GPL v3, WITHOUT the "or later" clause. Any modification and derivative work MUST be released under the SAME license, which means, at the very least, that the source code MUST be available upon request.

If you are releasing a modification of this app, you are kindly asked to make changes to at least the app name and package name.

Building (Gradle)

Make sure you have all submodules cloned and updated by running

git submodule update --init

A file keystore.properties is required in the root directory. Template:

storePassword=my-store-password
keyPassword=my-password
keyAlias=my-key
unprivKeyPassword=my-unpriv-password
unprivKeyAlias=my-unpriv-key
storeFile=/path/to/android/keystore

Note that you must have a Java-compatible keystore generated first.

To build the privileged OpenEUICC:

./gradlew :app:assembleRelease

For EasyEUICC:

./gradlew :app-unpriv:assembleRelease

Building (AOSP)

There are two ways to include OpenEUICC in your AOSP-based system image:

  1. Include this project and its dependencies inside the AOSP tree.
    • If inclusion in manifest.xml is required, remember to set the sync-s option to clone submodules.
    • The module name is OpenEUICC. You can include it in PRODUCT_PACKAGES, or simply build it standalone using mm.
    • Compilation of this project is only tested against the latest AOSP release version. The app itself should be compatible with older AOSP versions, but the source may not compile against an older AOSP source tree.
  2. If compilation against AOSP source tree is not possible, consider building with gradle and import the apk as a prebuilt.
    • No official Android.bp is provided for this case but it should be straightforward to write.
    • You might want to include privapp_whitelist_im.angry.openeuicc.xml as well.

FAQs

  • Q: Do you provide prebuilt binaries for OpenEUICC?
  • A: Debug-mode APKs are available continuously as an artifact of the Actions CI used by this project. However, these debug-mode APKs are not intended for inclusion inside system images, nor are they supported by the developer in any sense. If you are a custom ROM developer, either include the entire OpenEUICC repository in your AOSP source tree, or generate an APK using gradle and import that as a prebuilt system app. Note that you might want privapp_whitelist_im.angry.openeuicc.xml as well.

  • Q: AOSP's Settings app seems to be confused by OpenEUICC (for example, disabling / enabling profiles from the Networks page do not work properly)

  • A: When your device has internal eSIM chip(s) and you have inserted a removable eSIM chip, the Settings app can misbehave since it was never designed for this scenario. Please prefer using OpenEUICC's own management interface whenever possible. In the future, there might be an option to exclude removable SIMs from being reported to the Android system.

  • Q: Can EasyEUICC manage my phone's internal eSIM?

  • A: No. For EasyEUICC to work, the eSIM chip MUST proactively grant access via its ARA-M field.

  • Q: Removable eSIMs? Are they a joke?

  • A: No, even though the name "removable embedded SIM" can sound like an oxymoron. In fact, there can be many advantages to these chips compared to fully embedded ones. For example, the ability to transfer eSIM profiles without carrier support or approval, or the ability to use eSIM on devices that do not and may never get the support, such as Wi-Fi hotspots.

Copyright

Everything except libs/lpac-jni and art/:

Copyright 2022-2024 OpenEUICC contributors

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, version 3.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

libs/lpac-jni:

Copyright (C) 2022-2024 OpenEUICC contributiors

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation, version 2.1.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA

art/: Courtesy of Aikoyori, CC NC-SA 4.0.