Compare commits

...

5 commits

5 changed files with 74 additions and 15 deletions

View file

@ -1,8 +1,7 @@
android_app {
name: "OpenEUICC",
static_libs: [
// Dependencies that must be pulled from maven
"asn1bean-prebuilt-jar",
// Dependencies that must be pulled from maven,
"zxing-core-prebuilt-jar",
"zxing-android-embedded-prebuilt-aar",
@ -14,18 +13,22 @@ android_app {
"androidx.lifecycle_lifecycle-runtime-ktx",
"androidx.swiperefreshlayout_swiperefreshlayout",
"com.google.android.material_material",
"gson-prebuilt-jar",
"gson",
"kotlinx_coroutines",
],
jni_libs: [
"liblpac-jni",
],
srcs: [
// Main app
"app/src/main/**/*.kt",
// TruPhone LPAd library
"libs/lpad-sm-dp-plus-connector/src/generated/**/*.java",
"libs/lpad-sm-dp-plus-connector/src/main/**/*.java",
"libs/lpad-sm-dp-plus-connector/src/main/**/*.kt",
// lpac-jni interface
"libs/lpac-jni/src/main/**/*.kt",
],
optimize: {
enabled: false,
},
resource_dirs: [
"app/src/main/res",
],

0
Android.mk Normal file
View file

View file

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="ProtectedPermissions">
tools:ignore="ProtectedPermissions"
package="im.angry.openeuicc">
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />

View file

@ -29,21 +29,24 @@ class TelephonyManagerApduInterface(
if (channel.status != IccOpenLogicalChannelResponse.STATUS_NO_ERROR || channel.channel == IccOpenLogicalChannelResponse.INVALID_CHANNEL) {
throw IllegalArgumentException("Cannot open logical channel " + hex + " via TelephonManager on slot " + info.slotId);
}
return channel.channel
lastChannel = channel.channel
return lastChannel
}
override fun logicalChannelClose(handle: Int) {
check(handle == lastChannel) { "Invalid channel handle " }
tm.iccCloseLogicalChannelBySlot(info.slotId, handle)
lastChannel = -1
}
override fun transmit(tx: ByteArray): ByteArray {
check(lastChannel != -1) { "Uninitialized" }
val cla = tx[0].toInt()
val instruction = tx[1].toInt()
val p1 = tx[2].toInt()
val p2 = tx[3].toInt()
val p3 = tx[4].toInt()
val cla = tx[0].toUByte().toInt()
val instruction = tx[1].toUByte().toInt()
val p1 = tx[2].toUByte().toInt()
val p2 = tx[3].toUByte().toInt()
val p3 = tx[4].toUByte().toInt()
val p4 = tx.drop(5).toByteArray().encodeHex()
return tm.iccTransmitApduLogicalChannelBySlot(info.slotId, lastChannel,

View file

@ -0,0 +1,52 @@
cc_defaults {
name: "lpac-jni-defaults",
local_include_dirs: ["lpac"],
sdk_version: "current",
cflags: ["-Wno-error"],
}
cc_library_static {
name: "liblpac-cjson",
defaults: ["lpac-jni-defaults"],
srcs: [
"lpac/cjson/*.c",
],
}
cc_library_static {
name: "liblpac-asn1c",
defaults: ["lpac-jni-defaults"],
local_include_dirs: ["lpac/euicc/asn1c"],
cflags: ["-DHAVE_CONFIG_H"],
srcs: [
"lpac/euicc/asn1c/asn1/*.c",
],
}
cc_library_static {
name: "liblpac-euicc",
defaults: ["lpac-jni-defaults"],
srcs: [
"lpac/euicc/*.c",
],
static_libs: [
"liblpac-asn1c",
"liblpac-cjson",
],
}
cc_library_shared {
name: "liblpac-jni",
defaults: ["lpac-jni-defaults"],
header_libs: ["jni_headers"],
srcs: [
"lpac-jni/*.c",
],
static_libs: [
"liblpac-euicc",
"liblpac-asn1c",
"liblpac-cjson",
],
shared_libs: ["liblog"],
system_ext_specific: true,
}