Skip to content

Commit b8a18cd

Browse files
authored
Use the new EncodeMapTask output in the SDK and stop using resources (#2091)
1 parent b0572d4 commit b8a18cd

18 files changed

Lines changed: 179 additions & 171 deletions

File tree

embrace-android-core/src/main/kotlin/io/embrace/android/embracesdk/internal/injection/NativeCoreModuleImpl.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ internal class NativeCoreModuleImpl(
3838

3939
override val symbolService: SymbolService by singleton {
4040
symbolServiceProvider() ?: SymbolServiceImpl(
41-
coreModule.context,
4241
payloadSourceModule.deviceArchitecture,
4342
initModule.jsonSerializer,
4443
initModule.logger

embrace-android-core/src/main/kotlin/io/embrace/android/embracesdk/internal/ndk/symbols/SymbolServiceImpl.kt

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package io.embrace.android.embracesdk.internal.ndk.symbols
22

3-
import android.annotation.SuppressLint
4-
import android.content.Context
53
import android.util.Base64
64
import io.embrace.android.embracesdk.internal.DeviceArchitecture
5+
import io.embrace.android.embracesdk.internal.config.instrumented.InstrumentedConfigImpl
6+
import io.embrace.android.embracesdk.internal.config.instrumented.schema.InstrumentedConfig
77
import io.embrace.android.embracesdk.internal.logging.EmbLogger
88
import io.embrace.android.embracesdk.internal.logging.InternalErrorType
99
import io.embrace.android.embracesdk.internal.payload.NativeSymbols
1010
import io.embrace.android.embracesdk.internal.serialization.PlatformSerializer
1111

1212
class SymbolServiceImpl(
13-
private val context: Context,
1413
private val deviceArchitecture: DeviceArchitecture,
1514
private val serializer: PlatformSerializer,
1615
private val logger: EmbLogger,
16+
private val instrumentedConfig: InstrumentedConfig = InstrumentedConfigImpl,
1717
) : SymbolService {
1818

1919
override val symbolsForCurrentArch: Map<String, String>? by lazy {
@@ -34,30 +34,19 @@ class SymbolServiceImpl(
3434
}
3535
}
3636

37-
@SuppressLint("DiscouragedApi")
3837
private fun getNativeSymbols(): NativeSymbols? {
39-
val resources = context.resources
40-
val resourceId = resources.getIdentifier(KEY_NDK_SYMBOLS, "string", context.packageName)
41-
if (resourceId != 0) {
42-
try {
43-
val encodedSymbols: String = Base64.decode(
44-
context.resources.getString(resourceId),
45-
Base64.DEFAULT
46-
).decodeToString()
47-
return serializer.fromJson(encodedSymbols, NativeSymbols::class.java)
48-
} catch (ex: Exception) {
49-
logger.trackInternalError(InternalErrorType.INVALID_NATIVE_SYMBOLS, ex)
50-
}
38+
try {
39+
val encodedSymbols = instrumentedConfig.symbols.getBase64SharedObjectFilesMap() ?: return null
40+
val decodedSymbols: String = Base64.decode(encodedSymbols, Base64.DEFAULT).decodeToString()
41+
return serializer.fromJson(decodedSymbols, NativeSymbols::class.java)
42+
} catch (ex: Exception) {
43+
logger.trackInternalError(InternalErrorType.INVALID_NATIVE_SYMBOLS, ex)
5144
}
45+
5246
return null
5347
}
5448

5549
private companion object {
56-
57-
/**
58-
* The NDK symbols name that matches with the resource name injected by the plugin.
59-
*/
60-
private const val KEY_NDK_SYMBOLS = "emb_ndk_symbols"
6150
private const val ARM_ABI_V7_NAME = "armeabi-v7a"
6251
private const val ARM_64_NAME = "arm64-v8a"
6352
private const val ARCH_X86_NAME = "x86"
Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,36 @@
11
package io.embrace.android.embracesdk.internal.ndk.symbols
22

3-
import android.content.Context
4-
import android.content.res.Resources
53
import android.util.Base64
64
import androidx.test.ext.junit.runners.AndroidJUnit4
75
import io.embrace.android.embracesdk.fakes.FakeDeviceArchitecture
86
import io.embrace.android.embracesdk.fakes.FakeEmbLogger
97
import io.embrace.android.embracesdk.fakes.TestPlatformSerializer
8+
import io.embrace.android.embracesdk.fakes.config.FakeBase64SharedObjectFilesMap
9+
import io.embrace.android.embracesdk.fakes.config.FakeInstrumentedConfig
1010
import io.embrace.android.embracesdk.internal.payload.NativeSymbols
11-
import io.mockk.every
12-
import io.mockk.mockk
1311
import org.junit.Assert.assertEquals
1412
import org.junit.Assert.assertNull
1513
import org.junit.Test
1614
import org.junit.runner.RunWith
1715

16+
// Needed for android.util.Base64
1817
@RunWith(AndroidJUnit4::class)
1918
class SymbolServiceImplTest {
2019

21-
private companion object {
22-
private const val PACKAGE_NAME = "com.example.app"
23-
private const val SYMBOL_RES_ID = "emb_ndk_symbols"
24-
private const val RES_INT_VALUE = 1602934923
25-
}
26-
2720
private val symbolMap = mapOf(
2821
"armeabi-v7a" to mapOf("symbol" to "armeabi-v7a-value"),
2922
"arm64-v8a" to mapOf("symbol" to "arm64-v8a-value"),
3023
"x86" to mapOf("symbol" to "x86-value"),
3124
"x86_64" to mapOf("symbol" to "x86_64-value")
3225
)
3326

27+
private val serializer = TestPlatformSerializer()
28+
3429
private val limitedMap = symbolMap.filter { it.key != "arm64-v8a" }
3530

3631
@Test
3732
fun `missing symbols`() {
38-
val service = createService(symbolMap, resId = 0)
33+
val service = createServiceWithNullSymbols()
3934
assertNull(service.symbolsForCurrentArch)
4035
}
4136

@@ -66,26 +61,24 @@ class SymbolServiceImplTest {
6661
private fun createService(
6762
symbolMap: Map<String, Map<String, String>>,
6863
arch: String = "arm64-v8a",
69-
resId: Int = RES_INT_VALUE,
7064
): SymbolService {
71-
val res = mockk<Resources>(relaxed = true)
72-
val ctx = mockk<Context>(relaxed = true) {
73-
every { packageName } returns PACKAGE_NAME
74-
every { resources } returns res
75-
}
76-
77-
val serializer = TestPlatformSerializer()
7865
val json = serializer.toJson(NativeSymbols(symbols = symbolMap))
7966
val encodedSymbols = Base64.encodeToString(json.toByteArray(), Base64.DEFAULT)
8067

81-
every { res.getIdentifier(SYMBOL_RES_ID, "string", PACKAGE_NAME) } returns resId
82-
every { res.getString(resId) } returns encodedSymbols
83-
8468
return SymbolServiceImpl(
85-
ctx,
8669
FakeDeviceArchitecture(arch),
8770
serializer,
88-
FakeEmbLogger()
71+
FakeEmbLogger(),
72+
FakeInstrumentedConfig(symbols = FakeBase64SharedObjectFilesMap(encodedSymbols)),
73+
)
74+
}
75+
76+
private fun createServiceWithNullSymbols(): SymbolService {
77+
return SymbolServiceImpl(
78+
FakeDeviceArchitecture("arm64-v8a"),
79+
serializer,
80+
FakeEmbLogger(),
81+
FakeInstrumentedConfig(symbols = FakeBase64SharedObjectFilesMap(null)),
8982
)
9083
}
9184
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
plugins {
2+
id("com.android.application")
3+
id("io.embrace.swazzler")
4+
id("io.embrace.android.testplugin")
5+
}
6+
7+
integrationTest.configureAndroidProject(project)
8+
9+
repositories {
10+
google()
11+
mavenCentral()
12+
mavenLocal()
13+
}
14+
15+
embrace {
16+
autoAddEmbraceDependencies.set(true)
17+
}
18+
19+
android {
20+
externalNativeBuild {
21+
cmake {
22+
path("src/main/cpp/CMakeLists.txt")
23+
}
24+
}
25+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<manifest />
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
cmake_minimum_required(VERSION 3.10.2)
2+
3+
add_library(
4+
emb-crisps
5+
SHARED
6+
crisps.c
7+
)
8+
9+
add_library(
10+
emb-donuts
11+
SHARED
12+
donuts.c
13+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include <stdint.h>
2+
3+
int foo() {
4+
return 2;
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include <stdint.h>
2+
3+
int bar() {
4+
return 2;
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"app_id": "abcde",
3+
"api_token": "12345123451234512345123451234512",
4+
"ndk_enabled": true
5+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.app;
2+
3+
public class Bar {
4+
public static String getBar() {
5+
return "bar";
6+
}
7+
}

0 commit comments

Comments
 (0)