Compare commits

...
Sign in to create a new pull request.

43 commits

Author SHA1 Message Date
0d40947852 Release 1.6.2 2026-04-09 17:36:49 -04:00
6038cfe319 Merge tag 'unpriv-v1.6.2' into jmp 2026-04-09 17:16:18 -04:00
514dba0b0e Release v1.5.1
Version name is 1.5.1 to synchronize with EasyEUICC releases.
2025-12-31 22:15:35 -05:00
da9a2de793 app-unpriv: Properly enable uncompressed packaging for JNI libs 2025-12-26 17:52:49 -05:00
d661476f35 lpac-jni: Fix 16KiB page size support 2025-12-26 17:50:33 -05:00
dde4bd13f4 jmp: Customize website URL in settings 2025-12-26 17:36:03 -05:00
734aebb3cf Merge tag 'unpriv-v1.5.1' into jmp
Conflicts:
	.forgejo/workflows/build-debug.yml
	README.md
	app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedCustomizableTextProvider.kt
	app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt
2025-12-26 17:33:47 -05:00
c60ba8e103 JMP SIM Manager v1.2.1
This is a release only to fix F-Droid builds; no actual change to app is
made.
2025-01-26 16:30:41 -05:00
cb7d6a5fc2 jmp: Exclude dependency metadata from apks to fix F-Droid verification 2025-01-26 16:23:24 -05:00
b4ea193de2 JMP SIM Manager v1.2.0 2024-12-22 11:49:53 -05:00
654932a9f0 i18n: typo 2024-12-22 11:09:56 -05:00
a46849de40 i18n: Translate JMP-specific strings 2024-12-22 10:50:29 -05:00
0818abf71b jmp: Migrate customized text to CustomizableTextProvider 2024-12-22 10:35:54 -05:00
0673cf370a Merge remote-tracking branch 'openeuicc/master' into jmp
Conflicts:
	.forgejo/workflows/build-debug.yml
	app-unpriv/src/main/java/im/angry/openeuicc/di/UnprivilegedUiComponentFactory.kt
2024-12-22 08:56:31 -05:00
e424b8eee0 JMP SIM Manager v1.1.2 2024-10-22 22:08:42 -04:00
8d76f0eeac Merge remote-tracking branch 'openeuicc/master' into jmp 2024-10-21 21:05:31 -04:00
991cd2a156 JMP SIM Manager v1.1.1 2024-09-19 21:37:30 -04:00
0e3a57f948 Merge remote-tracking branch 'openeuicc/master' into jmp
Conflicts:
	README.md
2024-09-19 20:54:02 -04:00
316abf0a3d Release v1.1.0 2024-07-25 19:42:20 -04:00
a671d8d01f res: Stress the existence of USB reader support 2024-07-21 20:22:12 -04:00
9dbebc9b5d Merge remote-tracking branch 'openeuicc/master' into jmp 2024-07-21 20:16:32 -04:00
02b23ab3db Release v1.0.0 2024-04-21 17:07:57 -04:00
5d73d4b17d workflows: Add support for bundle builds 2024-04-21 15:59:25 -04:00
0518c3efd3 Prepare F-Droid Release (yet again) 2024-04-13 15:16:25 -04:00
0d75c849f0 workflows: Save debug symbols for releases 2024-04-13 15:15:20 -04:00
28f7be0f4c app-unpriv: Set ndkVersion as well for stripping
Otherwise, the stripping step always fails in CI builds. This breaks
reproducibility as debug info contains path to NDK.
2024-04-13 15:05:34 -04:00
d588ba78c1 Ditch REPRODUCIBLE_BUILD flag and set all prefix maps unconditionally 2024-04-13 11:33:00 -04:00
a4bd4f4305 Prepare F-Droid release after correcting reproducibility 2024-04-13 10:54:03 -04:00
b112194786 workflows: Correct build reproducibility
- REPRODUCIBLE_BUILD needs to be a string
- Fetch all history to generate versionCode correctly
2024-04-13 10:51:02 -04:00
75132b917c Prepare F-Droid release 2024-04-13 08:39:52 -04:00
ee1cdc8433 fastlane: Update screenshot to match the new Logical Slot -> SIM change 2024-03-30 18:58:30 -04:00
d57f129fa1 Merge remote-tracking branch 'openeuicc/master' into jmp 2024-03-30 18:56:07 -04:00
8b2cf8cb8d jmp: Add initial fastlane metadata 2024-03-30 18:39:18 -04:00
14687acc73 jmp: Customize the timeout dialog 2024-03-30 16:47:30 -04:00
267332afa4 Merge remote-tracking branch 'openeuicc/master' into jmp 2024-03-30 16:43:32 -04:00
02ef31199b jmp: Customize source code URL 2024-03-19 20:02:22 -04:00
bcc563aa83 jmp: Customize default placeholder when eUICC is missing 2024-03-19 20:00:35 -04:00
2270e4aa53 Merge remote-tracking branch 'openeuicc/master' into jmp 2024-03-18 18:49:00 -04:00
a4c474a405 README.md: Update for JMP SIM Manager 2024-03-17 20:22:23 -04:00
85156ca77e workflows: Correct build output path 2024-03-17 20:02:33 -04:00
937af2867a workflows: Correct debug apk name 2024-03-17 19:42:17 -04:00
a379307815 jmp: Adapt forgejo workflows 2024-03-17 17:56:04 -04:00
b37c1088b0 jmp: Add new build variant and branding 2024-03-10 17:07:43 -04:00
42 changed files with 359 additions and 144 deletions

View file

@ -3,9 +3,7 @@ name: Build Debug APKs
on:
push:
branches:
- '*'
tags:
- '*'
- 'jmp'
jobs:
build-debug:
@ -37,12 +35,14 @@ jobs:
uses: https://gitea.angry.im/actions/setup-android@v3
- name: Build Debug APKs
run: ./gradlew --no-daemon assembleDebug :app:assembleDebugMagiskModuleDir
run: ./gradlew --no-daemon :app-unpriv:assembleJmpDebug
- name: Build Debug Bundle
run: ./gradlew --no-daemon :app-unpriv:bundleJmpDebug
- name: Copy Artifacts
run: |
find . -name 'app*-debug.apk' -exec cp {} . \;
cp -r app/build/magisk/debug ./magisk-debug
- name: Upload APK Artifacts
uses: https://gitea.angry.im/actions/upload-artifact@v3
@ -50,10 +50,3 @@ jobs:
name: Debug APKs
compression-level: 0
path: app*-debug.apk
- name: Upload Magisk Artifacts
uses: https://gitea.angry.im/actions/upload-artifact@v3
with:
name: magisk-debug
compression-level: 0
path: magisk-debug

View file

@ -2,7 +2,7 @@ name: Build Release
on:
push:
tags: '*'
tags: 'jmp-v*'
jobs:
release:
@ -33,17 +33,23 @@ jobs:
- name: Setup Android SDK
uses: https://gitea.angry.im/actions/setup-android@v3
- name: Build Release APK (Unprivileged / EasyEUICC only)
run: ./gradlew --no-daemon :app-unpriv:assembleRelease
- name: Build Release APK
run: ./gradlew --no-daemon :app-unpriv:assembleJmpRelease
- name: Build Release Bundle
run: ./gradlew --no-daemon :app-unpriv:bundleJmpRelease
- name: Copy Debug Symbols to Release Path
run: cp app-unpriv/build/outputs/native-debug-symbols/release/native-debug-symbols.zip app-unpriv/build/outputs/apk/release/
run: cp app-unpriv/build/outputs/native-debug-symbols/jmpRelease/native-debug-symbols.zip app-unpriv/build/outputs/apk/jmp/release/
- name: Copy Bundle to Release Path
run: cp app-unpriv/build/outputs/bundle/jmpRelease/app-unpriv-jmp-release.aab app-unpriv/build/outputs/apk/jmp/release/
- name: Create Release
uses: https://gitea.angry.im/actions/forgejo-release@v1
with:
direction: upload
release-dir: app-unpriv/build/outputs/apk/release
release-dir: app-unpriv/build/outputs/apk/jmp/release
url: https://gitea.angry.im
token: ${{ secrets.FORGEJO_TOKEN }}
# Release details are expected to be edited manually

1
.idea/.name generated Normal file
View file

@ -0,0 +1 @@
OpenEUICC

2
.idea/compiler.xml generated
View file

@ -3,4 +3,4 @@
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="1.7" />
</component>
</project>
</project>

2
.idea/kotlinc.xml generated
View file

@ -3,4 +3,4 @@
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.9.24" />
</component>
</project>
</project>

1
LAST_RELEASE_VERCODE Normal file
View file

@ -0,0 +1 @@
301

124
README.md
View file

@ -1,125 +1,11 @@
<img src="https://gitea.angry.im/PeterCxy/OpenEUICC/media/branch/master/art/OpenEUICCBG.svg" width="512" height="300">
JMP SIM Manager
---
A fully free and open-source Local Profile Assistant implementation for Android devices.
This is a soft fork and branded version of [OpenEUICC](https://gitea.angry.im/PeterCxy/OpenEUICC) for the purpose of the [JMP eSIM Adapter](https://jmp.chat/esim-adapter).
__Google is threatening to lock down the Android platform in 2026. OpenEUICC and EasyEUICC, as Free Software projects, will never accept Google's proposed third-party developer verification flow. Join us in Keeping Android Open at <https://keepandroidopen.org/>.__
The eSIM Adapter is a removable eSIM chip that enables the use of downloaded eSIM profiles on any device with a modem. New profiles can be downloaded with the JMP SIM Manager on an Android device, or through a PC/SC smart card reader plugged into the Android device. [lpac](https://github.com/estkme-group/lpac) is available for use on a Linux/Windows/macOS PC.
There are two variants of this project, OpenEUICC and [EasyEUICC](https://easyeuicc.org):
| | OpenEUICC | EasyEUICC |
|:------------------------------|:-------------------------------:|:-------------------:|
| Privileged | Must be installed as system app | No |
| Internal eSIM | Supported | Unsupported |
| External eSIM [^1] | Supported | Supported |
| USB Readers | Supported | Supported |
| Requires allowlisting by eSIM | No | Yes -- except USB |
| System Integration | Partial [^2] | No |
| Minimum Android Version | Android 11 or higher | Android 9 or higher |
[^1]: Also known as "Removable eSIM"
[^2]: Carrier Partner API unimplemented yet
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][usb-ccid] are supported.
3. Prebuilt release-mode EasyEUICC apks can be downloaded [here][releases].
For OpenEUICC, no official release is currently provided and only debug mode APKs and Magisk modules can be found in
the [CI page][actions].
4. For removable eSIM chip vendors: to have your chip supported by official builds of EasyEUICC when inserted,
include the ARA-M hash `2A2FA878BC7C3354C2CF82935A5945A3EDAE4AFA`.
[sgp.22]: https://www.gsma.com/solutions-and-impact/technologies/esim/gsma_resources/sgp-22-v2-2-2/ "SGP.22 v2.2.2"
[usb-ccid]: https://en.wikipedia.org/wiki/CCID_%28protocol%29 "USB CCID Protocol"
[releases]: https://gitea.angry.im/PeterCxy/OpenEUICC/releases "EasyEUICC Releases"
[actions]: https://gitea.angry.im/PeterCxy/OpenEUICC/actions "OpenEUICC Actions"
**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
```shell
git submodule update --init
```
A file `keystore.properties` is required in the root directory. Template:
```ini
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:
```shell
./gradlew :app:assembleRelease
```
For EasyEUICC:
```shell
./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](https://gitea.angry.im/PeterCxy/android_prebuilts_openeuicc-deps) 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](#building-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.
[`privapp_whitelist_im.angry.openeuicc.xml`]: privapp_whitelist_im.angry.openeuicc.xml "OpenEUICC Privapp Whitelist"
# FAQs
- Q: Do you provide prebuilt binaries for OpenEUICC? \
A: Debug-mode APKs and Magisk modules 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: 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.
Releases can be found in the [release page](https://gitea.angry.im/jmp-sim/jmp-sim-manager/releases).
# Copyright

View file

@ -30,13 +30,23 @@ android {
buildTypes {
defaultConfig {
versionNameSuffix = "-unpriv"
//versionNameSuffix = "-unpriv"
}
release {
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
flavorDimensions += "variant"
productFlavors {
create("jmp") {
dimension = "variant"
applicationId = "chat.jmp.simmanager"
// See: Signing.kt
signingConfig = signingConfigs.getByName("config")
isDefault = true
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
@ -44,6 +54,15 @@ android {
kotlinOptions {
jvmTarget = "1.8"
}
packaging {
jniLibs {
useLegacyPackaging = true
}
}
dependenciesInfo {
// Disable dependency metadata -- breaks compatibility with F-Droid
includeInApk = false
}
}
dependencies {

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
tools:replace="android:icon,android:roundIcon,android:name"
android:name="im.angry.openeuicc.JmpSimManagerApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher_jmp"
android:roundIcon="@mipmap/ic_launcher_jmp"
android:label="@string/app_name"
android:supportsRtl="true"
android:localeConfig="@xml/locale_config"
android:theme="@style/Theme.OpenEUICC" />
</manifest>

View file

@ -0,0 +1,9 @@
package im.angry.openeuicc
import im.angry.openeuicc.di.JmpAppContainer
class JmpSimManagerApplication : UnprivilegedOpenEuiccApplication() {
override val appContainer by lazy {
JmpAppContainer(this)
}
}

View file

@ -0,0 +1,13 @@
package im.angry.openeuicc.di
import android.content.Context
class JmpAppContainer(context: Context) : UnprivilegedAppContainer(context) {
override val uiComponentFactory by lazy {
JmpUiComponentFactory()
}
override val customizableTextProvider by lazy {
JmpCustomizableTextProvider(context)
}
}

View file

@ -0,0 +1,16 @@
package im.angry.openeuicc.di
import android.content.Context
import android.net.Uri
import androidx.core.net.toUri
import im.angry.easyeuicc.R
class JmpCustomizableTextProvider(private val context: Context) :
UnprivilegedCustomizableTextProvider(context) {
override val websiteUri: Uri
get() = context.getString(R.string.purchase_sim_url).toUri()
override val noEuiccExplanation: String
get() = context.getString(R.string.no_euicc_jmp)
override val profileSwitchingTimeoutMessage: String
get() = context.getString(R.string.enable_disable_timeout_jmp)
}

View file

@ -0,0 +1,9 @@
package im.angry.openeuicc.di
import androidx.fragment.app.Fragment
import im.angry.openeuicc.ui.JmpNoEuiccPlaceholderFragment
class JmpUiComponentFactory : UnprivilegedUiComponentFactory() {
override fun createNoEuiccPlaceholderFragment(): Fragment =
JmpNoEuiccPlaceholderFragment()
}

View file

@ -0,0 +1,39 @@
package im.angry.openeuicc.ui
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import im.angry.easyeuicc.R
class JmpNoEuiccPlaceholderFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(
R.layout.fragment_no_euicc_placeholder_jmp,
container,
false
)
view.findViewById<View>(R.id.compatibility_check).setOnClickListener {
startActivity(Intent(requireContext(), QuickCompatibilityActivity::class.java))
}
view.findViewById<View>(R.id.purchase_esim).setOnClickListener {
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse(getString(R.string.purchase_sim_url))
)
)
}
return view
}
}

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="96dp"
android:height="96dp"
android:viewportHeight="100"
android:viewportWidth="100">
<path
android:pathData="M1,1 H99 V99 H1Z"
android:strokeColor="?android:attr/colorAccent"
android:strokeWidth="2">
<aapt:attr name="android:fillColor">
<gradient
android:endColor="#130036"
android:endX="50"
android:endY="99"
android:startColor="#7401CF"
android:startX="50"
android:startY="1"
android:type="linear" />
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,54 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="210dp"
android:height="210dp"
android:viewportWidth="210"
android:viewportHeight="210">
<path
android:pathData="m95.17,55.853 l-29.489,29.489v58.977c0,2.703 0.962,5.016 2.887,6.941 1.925,1.925 4.24,2.887 6.943,2.887h58.977c2.703,0 5.018,-0.963 6.943,-2.887 1.925,-1.925 2.887,-4.238 2.887,-6.941V65.681c0,-2.703 -0.962,-5.016 -2.887,-6.941 -1.925,-1.925 -4.24,-2.887 -6.943,-2.887z"
android:strokeWidth="6.38014"
android:fillColor="#00000000"
android:strokeColor="#ffffff"/>
<path
android:pathData="m74.928,88.813c-2.065,4.027 -2.065,9.301 -2.065,19.845L72.863,112.425c0,10.544 0,15.819 2.065,19.845 1.816,3.543 4.715,6.423 8.279,8.228 1.245,0.629 2.606,1.068 4.203,1.369 0.85,0.161 1.456,0.915 1.434,1.775l-0.092,3.919c-0.016,0.726 0.866,1.102 1.386,0.589l4.111,-4.078c1.001,-0.992 2.36,-1.547 3.776,-1.539 1.567,0.016 3.275,0.016 5.151,0.016l3.789,0c10.61,0 15.917,0 19.969,-2.052 3.564,-1.805 6.463,-4.686 8.28,-8.228 2.065,-4.027 2.065,-9.301 2.065,-19.845l0,-3.766c0,-10.544 0,-15.819 -2.065,-19.845C133.397,85.271 130.498,82.39 126.934,80.585 122.882,78.533 117.575,78.533 106.965,78.533l-3.789,0c-10.61,0 -15.917,0 -19.969,2.052 -3.564,1.805 -6.463,4.686 -8.279,8.228z"
android:fillType="evenOdd">
<aapt:attr name="android:fillColor">
<gradient
android:startY="78.53296"
android:startX="105.070526"
android:endY="140.1298"
android:endX="105.070526"
android:type="linear">
<item android:offset="0" android:color="#FF93D2FF"/>
<item android:offset="0.229167" android:color="#FF4A9BD5"/>
<item android:offset="0.7188" android:color="#FF398BD7"/>
<item android:offset="1" android:color="#FF1960CC"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="m133.604,102.178c-2.77,-2.157 -6.732,-3.68 -11.453,-4.396 -0.9,-0.137 -1.816,0.104 -2.527,0.666 -0.709,0.562 -1.149,1.39 -1.21,2.289L117.351,116.109c-0.025,0.349 -0.514,0.349 -0.539,0.001L115.527,98.559c-0.126,-1.984 -1.621,-3.55 -3.646,-3.812 -2.039,-0.264 -3.903,0.88 -4.536,2.784 -0.021,0.06 -0.039,0.122 -0.055,0.182l-2.943,11.245c-0.156,0.594 -0.952,0.615 -1.139,0.03L99.778,98.186c-0.597,-1.909 -2.503,-3.118 -4.534,-2.875 -2.029,0.243 -3.573,1.864 -3.67,3.865l-0.598,13.168c-0.015,0.334 -0.475,0.361 -0.529,0.033L88.57,101.029c-0.293,-1.783 -1.997,-3.001 -3.798,-2.718 -1.804,0.283 -3.026,1.958 -2.73,3.743l2.693,16.277c0.293,2.377 -0.431,4.01 -1.941,4.369 -1.382,0.328 -3.305,-0.487 -4.267,-3.052 -0.64,-1.7 -2.545,-2.572 -4.258,-1.952 -1.712,0.62 -2.586,2.5 -1.95,4.195 1.72,4.584 5.305,6.921 8.8,7.339 1.115,0.132 2.22,0.071 3.252,-0.176 1.957,-0.466 3.83,-1.625 5.153,-3.445 0.275,-0.379 0.857,-0.148 0.836,0.327l-0.106,2.352c-0.075,1.665 1.249,3.076 2.957,3.158 1.71,0.074 3.155,-1.208 3.231,-2.873l0.731,-16.087c0.017,-0.381 0.527,-0.453 0.643,-0.091l2.295,7.229c0.521,1.664 2.064,2.799 3.843,2.837 0.014,-0 0.029,-0 0.041,-0 1.8,0.018 3.378,-1.088 3.933,-2.753 0.021,-0.06 0.037,-0.122 0.055,-0.182l1.745,-6.665c0.099,-0.372 0.619,-0.32 0.647,0.065l1.182,16.147c0.115,1.571 1.444,2.778 3.029,2.811 0.093,0.002 0.186,0.001 0.281,-0.005 1.706,-0.115 2.99,-1.554 2.867,-3.217 -0.025,-0.35 0.33,-0.578 0.625,-0.41 0.413,0.237 0.884,0.386 1.392,0.421 0.064,0.004 0.131,0.006 0.196,0.008 1.712,0.019 3.157,-1.285 3.277,-2.995l0.318,-4.59c0.037,-0.53 0.438,-0.952 0.945,-1 9.346,-0.858 13.079,-5.544 13.384,-9.605 0.224,-3.045 -1.287,-5.994 -4.264,-8.31zM125.167,113.511c-0.571,0.088 -1.075,-0.399 -1.034,-0.999l0.443,-6.428c0.044,-0.612 0.63,-1.022 1.188,-0.824 3.937,1.398 5.701,3.444 5.606,4.736 -0.091,1.235 -2.084,2.87 -6.204,3.514z"
android:fillColor="#013255"
android:fillAlpha="0.2"/>
<path
android:pathData="m134.639,100.182c-2.894,-2.156 -7.036,-3.677 -11.971,-4.39 -0.941,-0.137 -1.898,0.105 -2.642,0.667 -0.742,0.563 -1.201,1.391 -1.267,2.29l-1.118,15.373c-0.026,0.349 -0.537,0.349 -0.563,0.001L115.743,96.572c-0.131,-1.984 -1.693,-3.549 -3.81,-3.81 -2.131,-0.263 -4.081,0.882 -4.743,2.787 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.082,11.247c-0.163,0.594 -0.995,0.615 -1.191,0.03L99.278,96.207c-0.624,-1.909 -2.616,-3.117 -4.739,-2.873 -2.121,0.244 -3.736,1.866 -3.839,3.867l-0.631,13.168c-0.016,0.333 -0.497,0.361 -0.553,0.033L87.56,99.055c-0.306,-1.783 -2.086,-3 -3.97,-2.717 -1.886,0.284 -3.164,1.959 -2.856,3.744l2.807,16.276c0.305,2.377 -0.453,4.01 -2.032,4.37 -1.445,0.329 -3.455,-0.486 -4.459,-3.05 -0.669,-1.699 -2.66,-2.571 -4.45,-1.95 -1.79,0.621 -2.705,2.501 -2.041,4.196 1.796,4.583 5.543,6.919 9.196,7.335 1.165,0.132 2.321,0.07 3.4,-0.178 2.046,-0.467 4.005,-1.627 5.389,-3.448 0.288,-0.379 0.896,-0.149 0.873,0.327L89.306,126.313c-0.079,1.665 1.304,3.076 3.09,3.156 1.788,0.073 3.299,-1.209 3.379,-2.874l0.772,-16.088c0.018,-0.381 0.551,-0.454 0.672,-0.092l2.396,7.228c0.544,1.663 2.156,2.798 4.016,2.835 0.015,-0 0.03,-0 0.042,-0 1.882,0.017 3.533,-1.09 4.113,-2.755 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.828,-6.666c0.103,-0.372 0.647,-0.32 0.676,0.065l1.228,16.146c0.119,1.571 1.508,2.778 3.166,2.81 0.097,0.001 0.194,0 0.294,-0.006 1.783,-0.116 3.126,-1.556 2.999,-3.218 -0.026,-0.35 0.345,-0.578 0.654,-0.41 0.431,0.237 0.924,0.386 1.455,0.42 0.067,0.004 0.137,0.006 0.205,0.008 1.79,0.018 3.301,-1.286 3.427,-2.997l0.335,-4.591c0.039,-0.53 0.458,-0.953 0.989,-1 9.771,-0.862 13.676,-5.551 13.996,-9.611 0.237,-3.045 -1.343,-5.993 -4.454,-8.308zM125.813,111.52c-0.597,0.088 -1.123,-0.398 -1.08,-0.998L125.2,104.093c0.046,-0.612 0.66,-1.022 1.242,-0.824 4.115,1.397 5.959,3.442 5.859,4.734 -0.096,1.235 -2.18,2.871 -6.488,3.517z"
android:fillColor="#013255"
android:fillAlpha="0.15"/>
<path
android:pathData="m134.722,99.167c-2.899,-2.15 -7.046,-3.666 -11.988,-4.378 -0.943,-0.136 -1.901,0.105 -2.646,0.666 -0.743,0.561 -1.203,1.387 -1.268,2.283l-1.121,15.33c-0.026,0.348 -0.538,0.348 -0.564,0.001l-1.336,-17.502c-0.131,-1.978 -1.695,-3.539 -3.815,-3.8 -2.134,-0.263 -4.087,0.879 -4.75,2.779 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.087,11.216c-0.163,0.592 -0.997,0.613 -1.193,0.03l-3.585,-10.77c-0.625,-1.904 -2.619,-3.108 -4.746,-2.864 -2.124,0.243 -3.742,1.861 -3.845,3.856l-0.633,13.132c-0.016,0.333 -0.498,0.36 -0.554,0.033l-1.959,-11.316c-0.306,-1.778 -2.089,-2.992 -3.975,-2.709 -1.889,0.283 -3.169,1.954 -2.86,3.734l2.81,16.231c0.305,2.371 -0.454,3.999 -2.035,4.358 -1.447,0.328 -3.46,-0.484 -4.466,-3.041 -0.67,-1.695 -2.663,-2.564 -4.456,-1.945 -1.793,0.619 -2.709,2.495 -2.044,4.184 1.799,4.57 5.551,6.899 9.209,7.314 1.167,0.132 2.325,0.07 3.405,-0.178 2.049,-0.466 4.011,-1.623 5.397,-3.438 0.288,-0.378 0.897,-0.148 0.875,0.326l-0.112,2.345c-0.08,1.66 1.306,3.067 3.094,3.147 1.79,0.073 3.304,-1.206 3.384,-2.866l0.774,-16.043c0.018,-0.38 0.552,-0.452 0.673,-0.092l2.399,7.208c0.544,1.659 2.159,2.79 4.022,2.827 0.015,-0 0.03,-0 0.042,-0 1.885,0.017 3.538,-1.087 4.119,-2.748 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.831,-6.648c0.103,-0.371 0.648,-0.319 0.677,0.065l1.229,16.101c0.119,1.567 1.51,2.77 3.17,2.802 0.097,0.001 0.195,0 0.295,-0.006 1.786,-0.116 3.131,-1.551 3.003,-3.21 -0.026,-0.349 0.346,-0.577 0.655,-0.409 0.432,0.236 0.925,0.385 1.457,0.419 0.067,0.004 0.137,0.006 0.205,0.008 1.792,0.018 3.306,-1.283 3.432,-2.988l0.335,-4.578c0.039,-0.529 0.459,-0.95 0.99,-0.998 9.785,-0.86 13.696,-5.536 14.017,-9.585 0.237,-3.036 -1.345,-5.977 -4.459,-8.285zM125.883,110.474c-0.598,0.088 -1.125,-0.397 -1.082,-0.996l0.468,-6.41c0.046,-0.611 0.66,-1.019 1.244,-0.822 4.121,1.393 5.967,3.432 5.866,4.72 -0.096,1.231 -2.183,2.864 -6.497,3.507z"
android:fillColor="#ffffff"/>
<path
android:pathData="m134.722,99.167c-2.898,-2.15 -7.046,-3.666 -11.988,-4.378 -0.943,-0.136 -1.901,0.105 -2.646,0.666 -0.743,0.561 -1.203,1.387 -1.268,2.283l-1.121,15.33c-0.026,0.348 -0.538,0.348 -0.564,0.001l-1.336,-17.502c-0.131,-1.978 -1.695,-3.539 -3.815,-3.8 -2.134,-0.263 -4.087,0.879 -4.75,2.779 -0.022,0.06 -0.041,0.122 -0.058,0.182l-3.087,11.216c-0.163,0.592 -0.997,0.613 -1.193,0.03l-3.585,-10.77c-0.624,-1.904 -2.619,-3.108 -4.746,-2.864 -2.124,0.243 -3.742,1.861 -3.845,3.856l-0.633,13.132c-0.016,0.333 -0.498,0.36 -0.554,0.033l-1.959,-11.316c-0.306,-1.778 -2.089,-2.992 -3.975,-2.709 -1.889,0.283 -3.169,1.954 -2.86,3.734l2.81,16.231c0.305,2.371 -0.454,3.999 -2.035,4.358 -1.447,0.328 -3.46,-0.484 -4.466,-3.041 -0.67,-1.695 -2.663,-2.564 -4.456,-1.945 -1.793,0.619 -2.709,2.495 -2.044,4.184 1.799,4.57 5.551,6.899 9.209,7.314 1.167,0.132 2.325,0.07 3.405,-0.178 2.049,-0.466 4.011,-1.623 5.397,-3.438 0.288,-0.378 0.897,-0.148 0.875,0.326l-0.112,2.345c-0.08,1.66 1.306,3.067 3.094,3.147 1.79,0.073 3.304,-1.206 3.384,-2.866l0.774,-16.043c0.018,-0.38 0.552,-0.452 0.673,-0.092l2.399,7.208c0.545,1.659 2.159,2.79 4.022,2.827 0.015,-0 0.03,-0 0.042,-0 1.885,0.017 3.538,-1.087 4.119,-2.748 0.022,-0.06 0.039,-0.122 0.058,-0.182l1.831,-6.648c0.103,-0.371 0.648,-0.319 0.677,0.065l1.229,16.101c0.119,1.567 1.51,2.77 3.17,2.802 0.097,0.001 0.195,0 0.295,-0.006 1.786,-0.116 3.131,-1.551 3.003,-3.21 -0.026,-0.349 0.346,-0.577 0.655,-0.409 0.432,0.236 0.925,0.385 1.457,0.419 0.067,0.004 0.137,0.006 0.205,0.008 1.792,0.018 3.306,-1.283 3.432,-2.988l0.335,-4.578c0.039,-0.529 0.459,-0.95 0.99,-0.998 9.786,-0.86 13.697,-5.536 14.017,-9.585 0.237,-3.036 -1.345,-5.977 -4.46,-8.285zM125.882,110.474c-0.598,0.088 -1.125,-0.397 -1.081,-0.996l0.468,-6.41c0.046,-0.611 0.661,-1.019 1.244,-0.822 4.121,1.393 5.967,3.432 5.867,4.72 -0.096,1.231 -2.183,2.864 -6.497,3.507z">
<aapt:attr name="android:fillColor">
<gradient
android:startY="91.803"
android:startX="104.54753"
android:endY="128.90585"
android:endX="104.94141"
android:type="linear">
<item android:offset="0" android:color="#00FFFFFF"/>
<item android:offset="1" android:color="#3D8DCDFC"/>
</gradient>
</aapt:attr>
</path>
</vector>

View file

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="210dp"
android:height="210dp"
android:viewportWidth="210"
android:viewportHeight="210">
<path
android:pathData="M94.373,52.662 L62.492,84.064v60.254c0,3.46 1.368,6.745 3.82,9.197 2.453,2.453 5.739,3.822 9.199,3.822h58.977c3.46,0 6.746,-1.369 9.199,-3.822 2.452,-2.452 3.82,-5.737 3.82,-9.197L147.508,65.682c0,-3.46 -1.368,-6.745 -3.82,-9.197 -2.453,-2.453 -5.739,-3.822 -9.199,-3.822zM96.492,59.043h37.996c1.946,0 3.291,0.556 4.688,1.953 1.397,1.397 1.953,2.74 1.953,4.686v78.637c0,1.946 -0.556,3.288 -1.953,4.686 -1.397,1.397 -2.742,1.953 -4.688,1.953L75.512,150.957c-1.946,0 -3.291,-0.556 -4.688,-1.953 -1.397,-1.397 -1.953,-2.74 -1.953,-4.686L68.871,86.662Z"
android:strokeWidth="0"
android:fillColor="#000000"
android:strokeColor="#00000000"/>
<path
android:pathData="M103.176,78.533C92.566,78.533 87.259,78.534 83.207,80.586C79.643,82.391 76.744,85.27 74.928,88.813C72.863,92.839 72.863,98.114 72.863,108.658L72.863,112.424C72.863,113.247 72.872,113.844 72.873,114.605C74.589,114.163 76.412,115.012 77.047,116.619C78.053,119.176 80.067,119.988 81.514,119.66C83.095,119.301 83.854,117.672 83.549,115.301L80.738,99.07C80.43,97.29 81.709,95.619 83.598,95.336C85.484,95.053 87.268,96.267 87.574,98.045L89.533,109.361C89.589,109.688 90.07,109.661 90.086,109.328L90.719,96.195C90.822,94.2 92.44,92.583 94.564,92.34C96.691,92.097 98.686,93.302 99.311,95.205L102.895,105.975C103.09,106.558 103.924,106.537 104.088,105.945L107.176,94.729C107.193,94.669 107.211,94.607 107.232,94.547C107.896,92.647 109.848,91.505 111.982,91.768C114.102,92.028 115.666,93.59 115.797,95.568L117.135,113.07C117.161,113.417 117.671,113.416 117.697,113.068L118.818,97.738C118.884,96.842 119.345,96.016 120.088,95.455C120.833,94.894 121.792,94.653 122.734,94.789C127.677,95.501 131.823,97.018 134.721,99.168C135.733,99.918 136.566,100.738 137.244,101.604C137.145,95.529 136.755,91.82 135.213,88.813C133.397,85.27 130.498,82.391 126.934,80.586C122.882,78.534 117.574,78.533 106.965,78.533L103.176,78.533zM126.293,102.199C125.784,102.154 125.31,102.534 125.27,103.068L124.801,109.479C124.757,110.077 125.285,110.563 125.883,110.475C130.196,109.831 132.283,108.198 132.379,106.967C132.48,105.678 130.635,103.639 126.514,102.246C126.441,102.221 126.366,102.206 126.293,102.199zM96.871,109.143C96.72,109.163 96.581,109.275 96.572,109.465L95.799,125.508C95.719,127.168 94.206,128.448 92.416,128.375C90.628,128.295 89.241,126.887 89.32,125.227L89.434,122.883C89.456,122.409 88.847,122.179 88.559,122.557C87.173,124.372 85.211,125.528 83.162,125.994C82.081,126.241 80.923,126.303 79.756,126.172C77.349,125.899 74.907,124.791 73.002,122.768C73.2,126.957 73.688,129.851 74.928,132.27C76.744,135.812 79.643,138.693 83.207,140.498C84.452,141.127 85.813,141.566 87.41,141.867C88.26,142.029 88.867,142.782 88.846,143.643L88.754,147.563C88.738,148.289 89.619,148.664 90.139,148.15L94.25,144.072C95.251,143.08 96.61,142.527 98.025,142.535C99.592,142.551 101.3,142.551 103.176,142.551L106.965,142.551C117.574,142.551 122.882,142.55 126.934,140.498C130.498,138.693 133.397,135.812 135.213,132.27C137.278,128.243 137.279,122.968 137.279,112.424L137.279,111.916C135.219,114.403 131.38,116.491 125.164,117.037C124.633,117.085 124.213,117.506 124.174,118.035L123.838,122.613C123.711,124.319 122.199,125.62 120.406,125.602C120.339,125.6 120.269,125.598 120.201,125.594C119.669,125.56 119.176,125.412 118.744,125.176C118.435,125.008 118.064,125.235 118.09,125.584C118.217,127.242 116.872,128.677 115.086,128.793C114.986,128.799 114.89,128.8 114.793,128.799C113.133,128.767 111.74,127.565 111.621,125.998L110.393,109.896C110.364,109.512 109.82,109.461 109.717,109.832L107.885,116.479C107.865,116.538 107.85,116.602 107.828,116.662C107.247,118.323 105.594,119.425 103.709,119.408C103.697,119.408 103.681,119.41 103.666,119.41C101.804,119.373 100.189,118.241 99.645,116.582L97.246,109.373C97.186,109.193 97.022,109.122 96.871,109.143z"
android:strokeWidth="0.642739"
android:fillColor="#000000"/>
</vector>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/no_euicc_placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginEnd="40dp"
android:gravity="center"
android:text="@string/no_euicc_jmp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/compatibility_check"
android:text="@string/compatibility_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@id/no_euicc_placeholder"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/purchase_esim"
android:text="@string/purchase_esim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@id/compatibility_check"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<foreground android:drawable="@drawable/ic_launcher_jmp_foreground"/>
<background android:drawable="@drawable/ic_launcher_jmp_background"/>
<monochrome android:drawable="@drawable/ic_launcher_jmp_monochrome"/>
</adaptive-icon>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="no_euicc_jmp">このデバイスで JMP eSIM Adapter を見つかりません。JMP eSIM Adapter をデバイスに挿入、または USB リーダーに経由し接続してください。</string>
<string name="purchase_esim">JMP eSIM Adapter を購入</string>
<string name="enable_disable_timeout_jmp">eSIM チップがプロファイルの切り替えの待機中にタイムアウトしました。 SIM ツールキットの Tools -> Reboot を選択し、eSIM Adapter をリフレッシュしてください。</string>
</resources>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="no_euicc_jmp">没有在此设备上发现 JMP eSIM Adapter。请将其插入本设备或 USB 读卡器。</string>
<string name="purchase_esim">购入 JMP eSIM Adapter</string>
<string name="enable_disable_timeout_jmp">等待 eSIM 芯片切换配置文件超时。请使用 SIM Toolkit 中的 Tools -> Reboot 手动刷新 eSIM Adapter。</string>
</resources>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name" translatable="false">JMP SIM Manager</string>
<string name="no_euicc_jmp">No JMP eSIM Adapter found on this device. Insert one into the device or through a USB card reader.</string>
<string name="purchase_esim">Buy JMP eSIM Adapter</string>
<string name="purchase_sim_url" translatable="false">https://jmp.chat/esim-adapter</string>
<string name="pref_info_source_code_url" translatable="false">https://gitea.angry.im/jmp-sim/jmp-sim-manager</string>
<string name="enable_disable_timeout_jmp">Timed out waiting for the eSIM chip to switch profiles. Please manually refresh the eSIM adapter by going to SIM Toolkit, and select Tools -> Reboot.</string>
</resources>

View file

@ -7,7 +7,7 @@ import im.angry.openeuicc.util.*
import kotlinx.coroutines.runBlocking
import kotlin.system.exitProcess
class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() {
open class UnprivilegedOpenEuiccApplication : OpenEuiccApplication() {
override val appContainer by lazy {
UnprivilegedAppContainer(this)
}

View file

@ -3,7 +3,7 @@ package im.angry.openeuicc.di
import android.content.Context
import im.angry.openeuicc.util.*
class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
open class UnprivilegedAppContainer(context: Context) : DefaultAppContainer(context) {
override val uiComponentFactory by lazy {
UnprivilegedUiComponentFactory()
}

View file

@ -12,7 +12,7 @@ import im.angry.openeuicc.util.*
import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec
class UnprivilegedCustomizableTextProvider(private val context: Context) : DefaultCustomizableTextProvider(context) {
open class UnprivilegedCustomizableTextProvider(private val context: Context) : DefaultCustomizableTextProvider(context) {
override val websiteUri: Uri
get() {
val parts = arrayOf(

View file

@ -24,4 +24,4 @@ open class UnprivilegedUiComponentFactory : DefaultUiComponentFactory() {
open fun createQuickCompatibilityFragment(): Fragment =
QuickCompatibilityFragment()
}
}

View file

@ -0,0 +1 @@
Initial public release of JMP SIM Manager.

View file

@ -0,0 +1 @@
Initial Google Play + F-Droid release of JMP SIM Manager.

View file

@ -0,0 +1,3 @@
- Added support for USB card readers (standard T=0 CCID protocol required)
- UI improvements (partially to accomodate USB readers)
- Fixed numerous crashes and stability issues

View file

@ -0,0 +1 @@
Fix JNI crash on armv7 (32 bit) devices

View file

@ -0,0 +1,3 @@
- Fixes compatibility on some devices which require slower APDU commands (e.g. Google Pixel series)
- Optimize long-running tasks (downloading, switching, etc.) to rely on true background services
- Miscellaneous bugfixes

View file

@ -0,0 +1,4 @@
- Brand new eSIM download wizard, with more detailed download progress and error diagnosis.
- New menu option inside the main UI which brings up detailed information about each eSIM adapter, including their EID, free NVRAM space etc.
- i18n translation for zh_CN and ja_JP (inherited from contribution to OpenEUICC)
- Many miscellaneous bugfixes and improvements, including ones for USB readers.

View file

@ -0,0 +1,4 @@
- Brand new eSIM download wizard, with more detailed download progress and error diagnosis.
- New menu option inside the main UI which brings up detailed information about each eSIM adapter, including their EID, free NVRAM space etc.
- i18n translation for zh_CN and ja_JP (inherited from contribution to OpenEUICC)
- Many miscellaneous bugfixes and improvements, including ones for USB readers.

View file

@ -0,0 +1,7 @@
Many updates since the last release:
- Simplified compatibility checks without all the confusing "maybe"s
- The eSIM download wizard now displays short, human-readable error messages whenever possible
- UI no longer extends into navigation bar / status bar on some devices
- Support for (potentially) upcoming eUICC variants with multiple Secure Elements
- ...and a lot of bugfixes and improvements!

View file

@ -0,0 +1,4 @@
- Full support for multi-SE eUICC chips via USB readers
- Support for (some) TPDU-only USB UICC readers (thanks to Vladimir Serbinenko) with an option to force TPDU mode globally
- You can now paste the full `LPA:` string into the input textbox for SM-DP+ address; that will automatically fill out the entire download form
- Several UI / translation fixes and improvements, such as the bug where the wrong slot is sometimes selected when you click the `+` button from the main UI

View file

@ -0,0 +1,5 @@
JMP SIM Manager is a fully free and open-source companion app for the JMP eSIM Adapter. The JMP eSIM Adapter is a removable eSIM chip that enables any device, not just those with included eSIM chips, to make use of downloadable eSIMs.
JMP SIM Manager provides management features such as adding, deleting, enabling, and disabling eSIM profiles for the adapter, and is the easiest option to manage your eSIM Adapter on compatible Android host devices. The manager app is <strong>not</strong> required once a profile has been downloaded and enabled on the adapter. In other words, you can use a compatible Android device to download your eSIM profile of choice onto the adapter, and then insert the adapter into any device -- Wi-Fi hotspots, dumb phones, laptops -- and the adapter will simply appear as a regular SIM card to those devices.
This app also includes a quick compatibility check to determine whether your Android device can be used to manage a JMP eSIM Adapter. Although the eSIM Adapter will work with almost any device once an eSIM profile is loaded, management requires some specific features that may not be present on a small percentage of Android devices. However, even if your Android device is deemed incompatible, you can still manage the adapter from another Android device, using a PC/SC reader on a PC, or, as a final fallback, through the SIM Toolkit menu along with a self-hostable remote server to handle TLS termination.

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View file

@ -0,0 +1 @@
Companion app for the JMP eSIM Adapter

View file

@ -0,0 +1 @@
JMP SIM Manager

View file

@ -1,5 +1,4 @@
LOCAL_PATH := $(call my-dir)
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
# function to find all *.c files under a directory
define all-c-files-under
@ -33,6 +32,7 @@ include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := lpac-jni
LOCAL_STATIC_LIBRARIES := lpac-euicc
LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/lpac
LOCAL_SRC_FILES := \

14
prepare_release.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -e
new_version=$(($(git rev-list --first-parent --count HEAD) + 1))
echo "New version code will be: ${new_version}"
echo "${new_version}" > ./LAST_RELEASE_VERCODE
changelog_path="./fastlane/metadata/android/en-US/changelogs"
mkdir -p ${changelog_path}
changelog_file="${changelog_path}/${new_version}.txt"
echo "Creating new changelog: ${changelog_file}"
touch "${changelog_file}"
echo "Please populate the changelog above, then create ONE commit, and tag the release."