[android] Drop Android SDK 21 and 22 support (#24201)# Why We are dropping Android SDK 21 and 22 support, we want to use this opportunity to also change the way minSdkVersion and other build.g
[android] Drop Android SDK 21 and 22 support (#24201)# Why We are dropping Android SDK 21 and 22 support, we want to use this opportunity to also change the way minSdkVersion and other build.gradle options which are the same across most of the modules are handled. Right now for each module minSdkVersion is read from the root project properties, if undefined it fallbacks to a default value which is defined on a per-module basis. In the new version we want the option to be configured from a gradle plugin so that it's not necessary to change the fallback value in ~70 files when changing the property. For now the SDK 49 compatibility checks increase amount of boilerplate in the , but with SDK 51 we will be able to remove them and ship modules with a lot less of it. # How Used the gradle plugin as a source of the minSdkVersion compileSdkVersion and targetSdkVersion settings. Settings are applied automatically with the plugin and can be overwritten in the build.gradle of the module. Along with these options lintOptions have been moved to the gradle plugin and two functions were created: useExpoPublising and useCoreDependencies both can be called after the plugin is applied to reduce some of the boilerplate. # Test Plan Tested in Bare Expo and Expo Go on Android SDK 33 and 34 (emulator)
show more ...
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected]
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/pac
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected]
[core][Android] Cleanup several Kotlin Opt-Ins (#24014)# Why Part of ENG-9805 # How Removes unneeded `@OptIn(ExperimentalStdlibApi::class)` # Test Plan - bare-expo ✅
[packages] fix react-native 0.73 compatibility [1/3] (#24018)# Why fix react-native 0.73 compatibility. these are for AGP 8 support - https://github.com/react-native-community/discussions-and-pr
[packages] fix react-native 0.73 compatibility [1/3] (#24018)# Why fix react-native 0.73 compatibility. these are for AGP 8 support - https://github.com/react-native-community/discussions-and-proposals/issues/671#issuecomment-1677632448 # How - [packages][bare-expo] set jvm version only if AGP < 8 - [av][dev-launcher] fix AGP 8 non transitive R issue - [dev-client][dev-launcher][dev-menu][core][notifications] fix AGP 8 non default buildConfig issue # Test Plan ci passed in #23961 (https://github.com/expo/expo/pull/23961/checks)
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]babel-preset-ex
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected]
[packages] fix another gradle 8 warnings (#22609)# Why there are other gradle 8 build warnings: ``` > Task :expo:processReleaseManifest package="expo.core" found in source AndroidManifest.x
[packages] fix another gradle 8 warnings (#22609)# Why there are other gradle 8 build warnings: ``` > Task :expo:processReleaseManifest package="expo.core" found in source AndroidManifest.xml: /home/runner/work/expo/expo/packages/expo/android/src/main/AndroidManifest.xml. Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated. Please instead set the namespace (or testNamespace) in the module's build.gradle file, as described here: https://developer.android.com/studio/build/configure-app-module#set-namespace This migration can be done automatically using the AGP Upgrade Assistant, please refer to https://developer.android.com/studio/build/agp-upgrade-assistant for more information. ``` # How migrate `package` in **AndroidManifest.xml** to `namespace` in **build.gradle** # Test Plan ci passed
[packages] fix gradle build warnings for gradle 8 (#22537)# Why there are some gradle warnings and will deprecate on gradle 8. since react-native 0.72 upgraded gradle 8, we should deal with thes
[packages] fix gradle build warnings for gradle 8 (#22537)# Why there are some gradle warnings and will deprecate on gradle 8. since react-native 0.72 upgraded gradle 8, we should deal with these warnings. close ENG-7481 # How ``` > Configure project :expo-modules-core WARNING:Software Components will not be created automatically for Maven publishing from Android Gradle Plugin 8.0. To opt-in to the future behavior, set the Gradle property android.disableAutomaticComponentCreation=true in the `gradle.properties` file or use the new publishing DSL. ``` remove the legacy `androidSourcesJar` ``` > Task :expo-constants:createDebugExpoConfig Execution optimizations have been disabled for task ':expo-constants:createDebugExpoConfig' to ensure correctness due to the following reasons: - Gradle detected a problem with the following location: '/Users/user/expo-app/android'. Reason: Task ':expo-constants:createDebugExpoConfig' uses this output of task ':app:checkDebugAarMetadata' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.5.1/userguide/validation_problems.html#implicit_dependency for more details about this problem. ``` remove `create${targetName}ExpoConfig` task inputs and some refactoring of the `get-app-config-android.gradle` # Test Plan ci passed
Upgrade roboletric and junit versions to be consistent (#22395)# Why The bumping of robolectric to 4.10 means that we no longer need jetifier to translate old support library dependencies. #
Upgrade roboletric and junit versions to be consistent (#22395)# Why The bumping of robolectric to 4.10 means that we no longer need jetifier to translate old support library dependencies. # How * Updates `robolectric` to `4.10` and `junit` to `4.13.2` * Updates test dependencies in `expo-modules-test-core` to their latest versions * A minor change needed to be made to the `expo-clipboard` test because of changes to the way that robolectric handles decoding bitmaps for tests. # Test Plan Ensured [unit tests still pass](https://github.com/josephyanks/expo/actions/runs/4896200135/jobs/8742724860) Trying to verify end to end tests locally.
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected]
Publish packages@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected]expo-b
Publish packages@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected]@expo/[email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]
[Android] Bump kotlin version to `1.8.10` (#21120)# Why This a follow-up to the https://github.com/expo/expo/pull/21117#discussion_r1100709414. # How Bumped the default kotlin version to `
[Android] Bump kotlin version to `1.8.10` (#21120)# Why This a follow-up to the https://github.com/expo/expo/pull/21117#discussion_r1100709414. # How Bumped the default kotlin version to `1.8.10`. I'll add a changelog entry later. # Test Plan - expo-go with NCL ✅ - bare-expo with NCL ✅
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/package-manager
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected][email protected][email protected]
[Android] Bump `compileSdkVersion` and `targetSdkVersion` to 33 (#20721)# Why Bumps the compile and target SDK version to 33. # How Changed SDK version from 31 to 33. Version 32 is correl
[Android] Bump `compileSdkVersion` and `targetSdkVersion` to 33 (#20721)# Why Bumps the compile and target SDK version to 33. # How Changed SDK version from 31 to 33. Version 32 is correlated with Android 12l which improves user experience on tablets or foldable phones. It doesn't require any changes from us. The 33 is introducing a couple of things that we may want to address. Most of them are connected with permissions. Fixes for that will be applied in a separate PR. Apart from that, everything else seems to be working fine. Behavior changes: - https://developer.android.com/about/versions/13/behavior-changes-all - https://developer.android.com/about/versions/13/behavior-changes-13 # Test Plan - Expo go with NCL and test-suite - simulator with API 33 ✅ - simulator with API 31 ✅ - physical device with API 33 ✅ - physical device with API 31 ✅ - Bare expo - simulator with API 33 ✅ - simulator with API 31 ✅ - physical device with API 33 ✅ - physical device with API 31 ✅ - Dev-Client - simulator with API 33 ✅ - simulator with API 31 ✅ - physical device with API 33 ✅ - physical device with API 31 ✅
Publish packages[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]expo-device
Publish packages[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]
[android][expo-media-library] migrate to new modules API (#20232)# Why Migrate native module to use new modules API # How This was a much larger migration than any I have attempted before so I
[android][expo-media-library] migrate to new modules API (#20232)# Why Migrate native module to use new modules API # How This was a much larger migration than any I have attempted before so I will need feedback from the team. Maybe something of this size is not wanted from external contributors. Followed the typical migration steps. Note - One of the functions `getAssetsAsync` accepts an options object. One of the parameters is an array that can be a mixed type. A string or a tuple. I wasn't sure how to type this. The Either type is still marked as experimental so I didn't want to use it. Also, regarding this options type, the `first` variable was used as an`Int` sometimes and a `Double` at other times. I settled on a `Double`. - The module was renamed from `ExponentMediaLibrary` to `ExpoMediaLibrary` - There are cases where I still use `promise.resolve(null)` I'm aware this is not usually necessary but without it, some functions would never resolve - There are some instances where an exception is caught and rejected in the same way it was with the old API. I've got varied feedback on this so I'm not sure which way is preferred - There are cases where functions use things that require a min SDK of 29. In the original code sometimes this was handled and other times it wasn't. Didn't know whether to handle this or leave as it # Test Plan Checked by running the bare expo app and running the existing test suite. After the first iteration, the checks in the bare app all passed but the native unit tests were broken because of the changes in the Pomise API. These were fixed, and now all 43 native tests pass. The JS tests all pass as before.
Publish packages@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/html-elements
Publish packages@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected]
[clipboard][Android] Fixes clipboard listener is called twice (#19723)# Why Fixes clipboard listener is called twice on Android. Fixes clipboard listener crashing the application on Android dur
[clipboard][Android] Fixes clipboard listener is called twice (#19723)# Why Fixes clipboard listener is called twice on Android. Fixes clipboard listener crashing the application on Android during the initialization phase. # How During the `dev-client` QA, I faced two issues with a clipboard. First of all, the listener's called twice for a single event. It was fixed by checking the timestamp. Moreover, the clipboard code may break the application, when the same listener is called in the initialization phase when react modules aren't fully initiated. I've decided to add a function to the app context to check if the react native is alive. # Test Plan - bare-expo ✅
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/prebuild
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected][email protected][email protected]
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected]eslint-config-u
Publish packages@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected]@expo/[email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected][email protected]@expo/[email protected][email protected][email protected][email protected]
[sweet API][Kotlin] Add a way to pass `Map` as a payload to the `sendEvent` method (#17859)# Why Adds a way to pass `Map<String, Any?>` as a payload to the `sendEvent` method. # How Add tw
[sweet API][Kotlin] Add a way to pass `Map` as a payload to the `sendEvent` method (#17859)# Why Adds a way to pass `Map<String, Any?>` as a payload to the `sendEvent` method. # How Add two new versions of `sendEvent` method: - with empty payload - with `Map<String, Any?> as a payload
[sweet API][Kotlin] Split the implementation of async and sync functions (#17656)# Why Split the implementation of async and sync functions. # How - The `call` method isn't in the base cl
[sweet API][Kotlin] Split the implementation of async and sync functions (#17656)# Why Split the implementation of async and sync functions. # How - The `call` method isn't in the base class `AnyFunction`. It was moved to the `appropriate` components. - I've added a common class for all of async functions - `AsyncFunction` - `function(...).runSynchronously` isn't available anymore - new component `Function` was introduced - Unfortunately, I had to add another builder for suspend functions which defer construction until we have access to the module's coroutine scope. # Test Plan - unit tests ✅ - instrumental tests ✅
[test-core][android] Support testing sync functions (#17641)* Clean up test utils, leverage contracts * Test support for sync functions - `ModuleHolder` already had support for test sync call
[test-core][android] Support testing sync functions (#17641)* Clean up test utils, leverage contracts * Test support for sync functions - `ModuleHolder` already had support for test sync calls, but it was unused - Adopted `ModuleMockInvocationHandler` to support sync calls - Deleted unused utils code from tests-core. We prefer to use a promise-less testing approach, but still not sure if deleting it is a good move. - Leveraged Kotlin [Contracts API](https://www.baeldung.com/kotlin/contracts) in some test utils to make testing more convenient
[test-core][android] Improve module mocking (#17519)- Exposed a spy object of actual `Module` instance (as a `moduleSpy` variable available in the test block scope). This adds a possibility to mock
[test-core][android] Improve module mocking (#17519)- Exposed a spy object of actual `Module` instance (as a `moduleSpy` variable available in the test block scope). This adds a possibility to mock module class members. - Added a possibility to provide both `Module` and `AppContext` instances to `ModuleMock.createMock` already as a `spyk()` objects. This makes additional mock setup possible. - Added a utility function `assertCodedException` to perform some common assertions of exceptions thrown by module methods. Co-authored-by: Łukasz Kosmaty <[email protected]>
[tests-core][android] Try fix "ReactContext is null" (#17350)The `AppContext` class holds only a weak reference to the `ReactContext` instance. I suspect that when there are lots of tests with diff
[tests-core][android] Try fix "ReactContext is null" (#17350)The `AppContext` class holds only a weak reference to the `ReactContext` instance. I suspect that when there are lots of tests with different Robolectric test configurations (API level, custom shadows etc.), moreover, some of them are being run in parallel, Robolectric sometimes destroys (garbage collects?) the context instance too early, before some tests can finish. I made `AppContext` a spy and overridden the `reactContext` getter to always return a strong reference to the `ReactApplicationContext` object (a proxy to the `android.content.Context`). It is created locally, but the `every { ... } returns context` construct stores the reference in MockK internals. * Fix module mock context * Uncomment clipboard tests
12