urbanairship / react-native-airship

Airship React Native module
Other
88 stars 62 forks source link

Proguard Build Failed #57

Closed AntiHate closed 7 years ago

AntiHate commented 7 years ago

I'm not sure if I report this here or at AndroidSDK but since I'm using react-native so I guess it better be here.

Progaurd build failing on fresh react-native app.

What I did: react-native init AwesomeProject and added keystore configs and enabled Proguard and also changed compileSdkVersion -> 26

assembleRelease -> Success

Then react-native install urbanairship-react-native that successfully linked into android gradlew clean assembleRelease -> Failed

Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest$1: can't find superclass or interface com.google.android.gms.location.LocationListener
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationServices
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationServices
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationServices
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationServices
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationServices
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationRequest
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest: can't find referenced class com.google.android.gms.location.LocationListener
Warning: com.urbanairship.location.FusedLocationAdapter$SingleLocationRequest$1: can't find referenced class com.google.android.gms.location.LocationListener
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'android.view.View findViewById(int)' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced field 'int CardView_cardBackgroundColor' in program class com.urbanairship.R$styleable
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'void setCardBackgroundColor(int)' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced field 'int CardView_cardElevation' in program class com.urbanairship.R$styleable
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'float getMaxCardElevation()' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'void setMaxCardElevation(float)' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'void setCardElevation(float)' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced field 'int CardView_cardCornerRadius' in program class com.urbanairship.R$styleable
Warning: com.urbanairship.push.iam.view.BannerCardView: can't find referenced method 'void setRadius(float)' in program class com.urbanairship.push.iam.view.BannerCardView
Warning: there were 27 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Warning: there were 9 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)
Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
:app:transformClassesAndResourcesWithProguardForRelease FAILED

/build.gradle

    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        jcenter()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }

    }
}

/app/build.gradle

    compileSdkVersion 26
    buildToolsVersion "26.0.0"
dependencies {
    compile project(':urbanairship-react-native')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

Is there anything I'm missing? Could you please help me out here?

rlepinski commented 7 years ago

@AntiHate You can add -dontwarn com.urbanairship.* to your proguard file for now to fix that. Could your provide your build.gradle config for proguard? I am curious why this is the first time these warnings are coming up.

AntiHate commented 7 years ago

@rlepinski I added -dontwarn com.urbanairship.* but still got the warnings, then I added another asterisk -dontwarn com.urbanairship.** and build got passed -> Successful, don't know what difference that made.

build.gradle

apply plugin: "com.android.application"

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation
 *   entryFile: "index.android.js",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn${productFlavor}${buildType}'
 *   //         'bundleIn${buildType}'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn${productFlavor}${buildType}'
 *   //         'devDisabledIn${buildType}'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = true

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.0"

    defaultConfig {
        applicationId "com.test"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }
    signingConfigs {
        release {
            storeFile file(MYAPP_RELEASE_STORE_FILE)
            storePassword MYAPP_RELEASE_STORE_PASSWORD
            keyAlias MYAPP_RELEASE_KEY_ALIAS
            keyPassword MYAPP_RELEASE_KEY_PASSWORD
        }
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86"
        }
    }
    buildTypes {
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            signingConfig signingConfigs.release
        }
    }
    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
            def versionCodes = ["armeabi-v7a":1, "x86":2]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
}

dependencies {
    compile project(':urbanairship-react-native')
    compile fileTree(dir: "libs", include: ["*.jar"])
    compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.facebook.react:react-native:+"  // From node_modules
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

package.json

{
    "name": "test",
    "version": "0.0.1",
    "private": true,
    "scripts": {
        "start": "node node_modules/react-native/local-cli/cli.js start",
        "test": "jest"
    },
    "dependencies": {
        "react": "16.0.0",
        "react-native": "0.50.3",
        "urbanairship-react-native": "^1.2.3"
    },
    "devDependencies": {
        "babel-jest": "21.2.0",
        "babel-preset-react-native": "4.0.0",
        "jest": "21.2.1",
        "react-test-renderer": "16.0.0"
    },
    "jest": {
        "preset": "react-native"
    }
}

Could this be something wrong with my setup? or related to Google play dependencies? As I told this is a fresh RN project. Thanks!

rlepinski commented 7 years ago

Nothing is wrong with those warnings and the probably exist in normal Android project but for whatever reason no one ever reported it to us. Card view and fused location are both optional dependencies. We will patch our SDK to remove those warnings, but for now the dontwarn you added should be fine. Thanks for the info!

AntiHate commented 7 years ago

Alright, good to know, Thanks!