I’ve recently upgraded our application from Expo SDK 32 to Expo SDK 35, and I’m having some trouble building an Android binary using Turtle.
Some (anonymized) details:
$ expo diagnostics
Expo CLI 3.4.1 environment info:
System:
OS: macOS 10.14.6
Shell: 5.4.2 - /usr/local/bin/zsh
Binaries:
Node: 10.15.3 - ~/.nvm/versions/node/v10.15.3/bin/node
Yarn: 1.16.0 - ~/.nvm/versions/node/v10.15.3/bin/yarn
npm: 6.4.1 - ~/.nvm/versions/node/v10.15.3/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
IDEs:
Android Studio: 3.5 AI-191.8026.42.35.5900203
Xcode: 11.1/11A1027 - /usr/bin/xcodebuild
npmPackages:
@types/expo: ^31.0.1 => 31.0.1
@types/react: ^16.8.23 => 16.9.9
@types/react-native: ^0.57.65 => 0.57.65
expo: ^35.0.0 => 35.0.0
react: 16.8.3 => 16.8.3
react-native: https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz => 0.59.8
react-navigation: ^3.0.9 => 3.0.9
$ turtle --version
0.12.5
$ cat app.json
{
"expo": {
"name": "App Name",
"slug": "app-slug",
"scheme": "app",
"icon": "./icons/dev.png",
"ios": {
"bundleIdentifier": "com.org.AppName"
},
"android": {
"package": "com.org.AppName",
"adaptiveIcon": {
"foregroundImage": "./icons/adaptive/dev.png",
"backgroundColor": "#041E2D"
},
"permissions": [
"CAMERA"
],
"versionCode": 14
},
"version": "1.0.0",
"splash": {
"image": "./icons/splash.png",
"backgroundColor": "#041E2D"
},
"orientation": "portrait",
"sdkVersion": "35.0.0",
"platforms": [
"ios",
"android"
]
}
}
Relevant (anonymized) environment variables:
EXPO_USERNAME=username
EXPO_PASSWORD=password
EXPO_ANDROID_KEYSTORE_PASSWORD=password
EXPO_ANDROID_KEY_PASSWORD=password
(Anonymized) Turtle command:
turtle \
build:android -o appName-1.0.0.apk \
--keystore-path /path/to/keystore.jks \
--keystore-alias keystore alias
Device Info:
Model: Nexus 5X
Android version: 8.11.0
Android security patch level: November 5, 2018
Baseband version: M8994F-2.6.42.5.03
Build number: OPM7.181105.004
When I try to install the APK on the device I receive a message “There was a problem parsing the package.”
I then enable developer mode the device, and attempt to install using adb
from Turtle:
~/.turtle/androidDependencies/sdk/platform-tools $ ./adb devices [ruby-2.2.0]
List of devices attached
00c8b8a449711c10 device
~/.turtle/androidDependencies/sdk/platform-tools $ ./adb -s 00c8b8a449711c10 install appname-1.0.0.apk
Performing Streamed Install
adb: failed to install appname-1.0.0.apk: Failure [INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION: Failed to parse /data/app/vmdl1142796601.tmp/base.apk: AndroidManifest.xml]
Taking a look at the adb logcat
output, I see:
Failed to parse /data/app/vmdl1494921565.tmp/base.apk
java.io.FileNotFoundException: AndroidManifest.xml
at android.content.res.AssetManager.openXmlAssetNative(Native Method)
at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:546)
at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:514)
at android.content.pm.PackageParser.parseApkLite(PackageParser.java:1735)
at com.android.server.pm.PackageInstallerSession.validateInstallLocked(PackageInstallerSession.java:1001)
at com.android.server.pm.PackageInstallerSession.sealAndValidateLocked(PackageInstallerSession.java:776)
at com.android.server.pm.PackageInstallerSession.commit(PackageInstallerSession.java:717)
at android.content.pm.PackageInstaller$Session.commit(PackageInstaller.java:922)
at com.android.server.pm.PackageManagerShellCommand.doCommitSession(PackageManagerShellCommand.java:1478)
at com.android.server.pm.PackageManagerShellCommand.runInstall(PackageManagerShellCommand.java:213)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:109)
at android.os.ShellCommand.exec(ShellCommand.java:96)
at com.android.server.pm.PackageManagerService.onShellCommand(PackageManagerService.java:22602)
at android.os.Binder.shellCommand(Binder.java:594)
at android.os.Binder.onTransact(Binder.java:492)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:2658)
at com.android.server.pm.PackageManagerService.onTransact(PackageManagerService.java:3774)
at android.os.Binder.execTransact(Binder.java:697)
Things I’ve tried:
rm -rf ~/.expo
rm -rf ~/.turtle
watchman watch-del-all
rm -rf /tmp/metro-bundler-cache-*
rm -rf /tmp/haste-map-react-native-packager-*
rm -fr $TMPDIR/metro*
yarn cache clean
rm -rf node_modules
yarn install
Any ideas what I’m doing wrong?