Duplicate files copied in APK lib/x86/libexpo-gl.so

Using ExpoKit 29 (upgraded from 27 recently) and trying to run the Android app.

I’m getting the feeling I messed something up in the upgrade process from ExpoKit 27 to 29, but not sure where to fix it.

If I run the gradle sync, then try to run the app, the build fails with the following:

Duplicate files copied in APK lib/x86/libexpo-gl.so
	File1: /Users/myname/.android/build-cache/883852506b4946bf745e5ac4d0294b05dd642ee4/output/jni
	File2: /Users/myname/.android/build-cache/15d42af58dc890e1c3a6802c846256e62974fdfe/output/jni

I can’t seem to find anyone else with this issue in the forums, so I’m guessing I screwed something up!

Hey @ec_raphael - could you post your android/app/build.gradle file?

@esamelson absolutely:

buildscript {
  repositories {
    maven { url 'https://maven.fabric.io/public' }

  dependencies {
    classpath 'io.fabric.tools:gradle:1.+'
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.neenbedankt.android-apt'

repositories {
  maven { url 'https://maven.fabric.io/public' }

android {
  compileSdkVersion 26
  buildToolsVersion '26.0.1'

  defaultConfig {
    applicationId 'com.verycool.app'
    targetSdkVersion 25
    versionCode 4
    versionName '0.4.1'
    ndk {
      abiFilters 'armeabi-v7a', 'x86'
    multiDexEnabled true
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    // Deprecated. Used by net.openid:appauth
    manifestPlaceholders = [
      'appAuthRedirectScheme': 'host.exp.exponent'
  dexOptions {
    javaMaxHeapSize System.getenv("DISABLE_DEX_MAX_HEAP") ? null : "8g"
    keepRuntimeAnnotatedClasses false
  productFlavors {
    // Define separate dev and prod product flavors.
    dev {
      // dev utilizes minSDKVersion = 21 to allow the Android gradle plugin
      // to pre-dex each module and produce an APK that can be tested on
      // Android Lollipop without time consuming dex merging processes.
      minSdkVersion 21
    devRemoteKernel {
      minSdkVersion 21
    dev19 {
      // For debugging / development on older SDK versions. Increases build
      // time so use 'dev' if not running on older SDKs.
      minSdkVersion 19
    prod {
      // The actual minSdkVersion for the application.
      minSdkVersion 19
  buildTypes {
    debug {
      debuggable true
    release {
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
      zipAlignEnabled true
  signingConfigs {
    debug {
      storeFile file('../debug.keystore')
  lintOptions {
    abortOnError false

// Don't use modern jsc-android since it still has some critical bugs that
// crash applications when the string for the JS bundle is loaded and when
// locale-specific date functions are called.
// configurations.all {
//   resolutionStrategy {
//     force 'org.webkit:android-jsc:r216113'
//   }
// }

apply from: 'expo.gradle'

dependencies {
    compile project(':react-native-iap')
  compile fileTree(dir: 'libs', include: ['*.jar'])

  compile 'com.android.support:multidex:1.0.1'

  // Our dependencies
  compile 'com.android.support:appcompat-v7:26.0.1'

  // Our dependencies from ExpoView
  compile 'com.android.support:appcompat-v7:26.0.1'
  compile 'com.facebook.android:facebook-android-sdk:4.7.0'
  compile('com.facebook.android:audience-network-sdk:4.22.1') {
    exclude module: 'play-services-ads'
  provided 'org.glassfish:javax.annotation:3.1.1'
  compile 'com.jakewharton:butterknife:7.0.1'
  compile 'de.greenrobot:eventbus:2.4.0'
  compile 'com.amplitude:android-sdk:2.9.2' // Be careful when upgrading! Upgrading might break experience scoping. Check with Jesse. See Analytics.resetAmplitudeDatabaseHelper
  compile 'com.squareup.picasso:picasso:2.5.2'
  compile 'com.google.android.gms:play-services-gcm:9.8.0'
  compile 'com.google.android.gms:play-services-analytics:9.8.0'
  compile 'com.google.android.gms:play-services-maps:9.8.0'
  compile 'com.google.android.gms:play-services-auth:9.8.0'
  compile 'com.google.android.gms:play-services-location:9.8.0'
  compile 'com.google.android.gms:play-services-ads:9.8.0'
  apt 'com.raizlabs.android:DBFlow-Compiler:2.2.1'
  compile "com.raizlabs.android:DBFlow-Core:2.2.1"
  compile "com.raizlabs.android:DBFlow:2.2.1"
  compile "com.madgag.spongycastle:core:"
  compile "com.madgag.spongycastle:prov:"
  debugCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
  // debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta1'
  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1'
  compile 'com.facebook.device.yearclass:yearclass:1.0.1'
  compile 'commons-io:commons-io:1.3.2'
  compile 'me.leolin:ShortcutBadger:1.1.4@aar'
  compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
  compile 'com.theartofdev.edmodo:android-image-cropper:2.4.7'
  compile 'com.yqritc:android-scalablevideoview:1.0.1'
  compile 'commons-codec:commons-codec:1.10'
  compile 'com.segment.analytics.android:analytics:4.3.0'
  compile 'com.google.zxing:core:3.2.1'
  compile 'net.openid:appauth:0.4.1'
  compile 'com.airbnb.android:lottie:2.2.0'
  compile 'io.branch.sdk.android:library:2.6.1'
  compile('io.nlopez.smartlocation:library:3.2.11') {
    transitive = false
  compile 'com.android.support:exifinterface:26.0.1'
  compile 'com.squareup.okhttp3:okhttp:3.4.1'
  compile 'com.squareup.okhttp3:okhttp-urlconnection:3.4.1'
  compile 'com.squareup.okhttp3:okhttp-ws:3.4.1'
  compile 'com.squareup.okio:okio:1.9.0'

  // Testing
  androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1'
  // We use a modified build of com.android.support.test:runner:1.0.1. Explanation in maven-test/README
  androidTestCompile 'com.android.support.test:runner:1.0.1'
  androidTestCompile 'com.android.support:support-annotations:26.0.1'
  androidTestCompile 'com.google.code.findbugs:jsr305:3.0.0'
  androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
  androidTestCompile 'com.azimolabs.conditionwatcher:conditionwatcher:0.2'

  compile('host.exp.exponent:expoview:29.0.0@aar') {
    transitive = true
    exclude group: 'com.squareup.okhttp3', module: 'okhttp'
    exclude group: 'com.squareup.okhttp3', module: 'okhttp-urlconnection'

// This has to be down here for some reason
apply plugin: 'com.google.gms.google-services'

Hey @ec_raphael - I don’t see anything obviously wrong there or any duplicated dependencies. If you’re running this from inside Android Studio, it may be worth cleaning your project and re-syncing again with a fresh start? Otherwise I think the best thing to do would be to eject an empty SDK 29 project and compare the android files there to see what else might have changed. It looks like you only have one other RN modules installed (IAP) so you could even just do a clean eject from SDK 29 and re-link that module.

Sorry to not have a better answer for you :disappointed:

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.