Kotlinx.coroutines: Proguard warning about AtomicFU#setInterceptor()

Created on 18 Apr 2019  路  1Comment  路  Source: Kotlin/kotlinx.coroutines

After updating to 1.2.0 I got

Warning: kotlinx.atomicfu.AtomicFU: can't find referenced method 'void setInterceptor(kotlinx.atomicfu.AtomicOperationInterceptor)' in program class kotlinx.atomicfu.InterceptorKt
from ProGuard, version 6.0.3.

I solved it by adding -dontwarn kotlinx.atomicfu.AtomicFU in proguard rules, but I'm in doubt if it's a safe way to fix it and even if it is. It's probably required to add this line to coroutines.pro file.

bug

>All comments

strill getting warning Warning: kotlinx.coroutines.flow.FlowKt__MergeKt: can't find referenced class kotlinx.atomicfu.AtomicBoolean
cannot make release build :

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

dependencies {
    classpath 'io.fabric.tools:gradle:1.+'
}
configurations.all {
    resolutionStrategy {
        force 'net.sf.proguard:proguard-gradle:6.0.3'
    }
}

}
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.firebase-perf'
apply plugin: 'kotlin-android'
apply plugin: 'io.fabric'
apply plugin: 'kotlin-kapt'
repositories {
mavenCentral()
google()
maven { url 'https://maven.fabric.io/public' }
maven{ url 'https://sdk.uxcam.com/android/' }
}

//project.ext {
// daggerVersion = "2.13"
// rxJavaVersion = "2.1.0"
// rxAndroidVersion = "2.0.2"
//}
android {
signingConfigs {
config {
keyAlias 'key0'
keyPassword 'qwerty'
storeFile file('/Users/utkarshshukla/Desktop/keystores/android.jks')
storePassword 'qwerty'
}
}
compileSdkVersion 27
defaultConfig {
minSdkVersion 16

    targetSdkVersion 27
    applicationId  "com.gyanapp"
    versionCode 206
    multiDexEnabled true
    vectorDrawables.useSupportLibrary = true
    versionName "1.0.59"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {


        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.config
        debuggable false
    }
    debug {


        minifyEnabled false
        shrinkResources false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

// manifestPlaceholders = [applicationId:android.defaultConfig.applicationId + ".dev"]
debuggable true

    }
}
flavorDimensions "default"
productFlavors {
    dev {
        buildConfigField "String", rootProject.ext.SERVER_URL, rootProject.ext.DEV_URL
        buildConfigField "String", rootProject.ext.DYNAMIC_LINK, rootProject.ext.DEV_DYNAMIC_LINK
        applicationId android.defaultConfig.applicationId + ".dev"
        resValue "string", "app_name", "GyanApp-Dev"
        versionName = android.defaultConfig.versionName

// manifestPlaceholders = [applicationId:android.defaultConfig.applicationId +".dev"]

    }
    prod {
        buildConfigField "String", rootProject.ext.SERVER_URL, rootProject.ext.PROD_URL
        buildConfigField "String", rootProject.ext.DYNAMIC_LINK, rootProject.ext.PROD_DYNAMIC_LINK
        applicationId android.defaultConfig.applicationId
        resValue "string", "app_name", "GyanApp"
        versionName = android.defaultConfig.versionName

// manifestPlaceholders = [applicationId:android.defaultConfig.applicationId ]
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
}
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
// project.ext {
// daggerVersion = "2.15"
// }
}

dependencies {
implementation project(':gyanapi')
implementation fileTree(include: ['.jar'], dir: 'libs')
implementation project(':aztec')
implementation project(':glide-loader')
implementation project(':picasso-loader')
implementation project(':wordpress-comments')
implementation project(':wordpress-shortcodes')
implementation 'com.android.support:multidex:1.0.3'
implementation fileTree(include: ['
.jar'], dir: 'libs')
implementation "com.android.support:appcompat-v7:$supportLibVersion"
implementation 'org.apmem.tools:layouts:1.10@aar'
implementation 'joda-time:joda-time:2.9.4'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
implementation 'com.android.support:design:28.0.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

// Dagger core
annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
implementation "com.google.dagger:dagger:$daggerVersion"

// Dagger Android
annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"

// if you are not using support library, include this instead
implementation "com.google.dagger:dagger-android:$daggerVersion"

kapt "com.google.dagger:dagger-compiler:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
// Lifecyles, LiveData and ViewModel
implementation 'android.arch.lifecycle:runtime:1.1.1'
implementation 'android.arch.lifecycle:extensions:1.1.1'
kapt 'android.arch.lifecycle:extensions:1.1.1'

annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

// ReactiveX
implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
implementation 'com.squareup.retrofit2:retrofit:2.4.0'

// Retrofit2  converter
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

// Retrofit2 and RxJava2
implementation 'io.reactivex.rxjava2:rxjava:2.1.9'

//    RxAndroid adds android specific bindings for RxJava,

// Specifically AndroidSchedulers.mainThread() which provides a Scheduler

// that schedules on main thread and can be used to switch between threads in Android.
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

//    Retrofit 2 works seamlessly with RxJava 2 using the

// RxJava 2 adapter for Retrofit 2, add the following dependency

// to enable the RxJava 2 compatibility
implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
    transitive = true;
}
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.1'
implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.facebook.android:facebook-android-sdk:4.37.0'
implementation 'org.parceler:parceler-api:1.1.11'
annotationProcessor 'org.parceler:parceler:1.1.11'
implementation 'org.jsoup:jsoup:1.10.3'
implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'
implementation 'com.github.duanhong169:colorpicker:1.1.5'
implementation 'com.google.firebase:firebase-core:16.0.8'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
implementation "org.wordpress:utils:$wordpressUtilsVersion"
implementation 'com.mixpanel.android:mixpanel-android:5.+'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.firebase:firebase-dynamic-links:16.1.8'
implementation "com.google.firebase:firebase-invites:16.1.1"
implementation 'com.google.firebase:firebase-perf:16.2.5'
implementation 'com.android.installreferrer:installreferrer:1.0'
implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin+Coroutines

// optional - RxJava2 support
implementation "android.arch.work:work-rxjava2:$work_version"

// optional - Test helpers
androidTestImplementation "android.arch.work:work-testing:$work_version"

// implementation 'com.appsee:appsee-android:+'
implementation 'com.uxcam:uxcam:3.0.6@aar'
implementation 'com.tbuonomo.andrui:viewpagerdotsindicator:3.0.3'
implementation 'com.airbnb.android:lottie:2.6.0'

implementation 'com.clevertap.android:clevertap-android-sdk:3.4.2'

implementation 'com.google.android.exoplayer:exoplayer:2.8.4'
implementation 'com.google.android.exoplayer:exoplayer-hls:2.8.4'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.8.4'

// Room components
implementation "android.arch.persistence.room:runtime:$rootProject.roomVersion"
kapt "android.arch.persistence.room:compiler:$rootProject.roomVersion"
androidTestImplementation "android.arch.persistence.room:testing:$rootProject.roomVersion"

// Lifecycle components
kapt "android.arch.lifecycle:compiler:$rootProject.archLifecycleVersion"

// Coroutines
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:$rootProject.coroutines"
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:$rootProject.coroutines"

implementation 'com.facebook.stetho:stetho:1.5.1'

}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.appsee.appsee-plugin'

kotlin {
experimental {
coroutines "enable"
}
}`

### proguard rules

`
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$* {
*
[] $VALUES;
public *;
}

-keep class com.google.gson.* { *; }
-dontwarn com.squareup.picasso.
*
-dontwarn com.squareup.okhttp.*
-keep public class org.jsoup.
* { public *; }

-dontwarn com.google.errorprone.annotations.**

-keepclassmembers class * implements java.io.Serializable {
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

-keepnames class com.facebook.FacebookActivity
-keepnames class com.facebook.CustomTabActivity

-keep class com.facebook.login.Login

-keepattributes Signature, InnerClasses
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* ;
}
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn javax.annotation.*
-dontwarn kotlin.Unit
-dontwarn retrofit2.-KotlinExtensions
-dontwarn okio.
*

-keepattributes Annotation

-keepclassmembers enum android.arch.lifecycle.Lifecycle$Event {
;
}

-keep class * implements android.arch.lifecycle.LifecycleObserver {
}

-keep class * implements android.arch.lifecycle.GeneratedAdapter {
(...);
}

-keepclassmembers class ** {
@android.arch.lifecycle.OnLifecycleEvent *;
}

-keep class com.crashlytics.* { *; }
-dontwarn com.crashlytics.
*

-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final * NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}

-keep interface org.parceler.Parcel
-keep @org.parceler.Parcel class * { ; }
-keep class *
$$Parcelable { *; }

-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}

-keepattributes SourceFile,LineNumberTable

-keep class org.apache.* { *; }
-keepnames class com.fasterxml.jackson.
* { ; }
-keepnames class javax.servlet.
* { ; }
-keepnames class org.ietf.jgss.
* { ; }
-dontwarn org.w3c.dom.
*
-dontwarn org.joda.time.*
-dontwarn org.shaded.apache.
*
-dontwarn org.ietf.jgss.**

-keep class com.shaded.fasterxml.jackson.** { *; }

-dontwarn kotlin.**

-keep public class com.google.android.gms.* { public ; }
-dontwarn com.google.android.gms.
*

-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}

-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final * NULL;
}

-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}

-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}

-dontwarn org.conscrypt.**

-dontwarn com.google.gson.Gson$6

-keep class com.appsee.* { *; }
-dontwarn com.appsee.
*
-keep class android.support.* { *; }
-keep interface android.support.
* { ; }
-keep class androidx.
* { ; }
-keep interface androidx.
* { ; }
-keep class com.uxcam.
* { ; }
-dontwarn com.uxcam.
*

-dontwarn com.clevertap.android.sdk.**

-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {}
-keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {}

-keepclassmembernames class kotlinx.** {
volatile ;
}

-keep class com.google.android.gms.internal.** { *; }
-dontwarn com.google.android.gms.internal.zzhu

-dontwarn kotlin.*
-dontwarn kotlin.reflect.jvm.internal.
*
-keep class kotlin.reflect.jvm.internal.** { *; }

-keep class kotlin.Metadata { ; }
-keepclassmembers public class com.mypackage.
* {
public synthetic ;
}
-keepclassmembers class kotlin.Metadata {
public ;
}

-keepclassmembers class **$WhenMappings {
;
}

-dontwarn android.arch.util.paging.CountedDataSource
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource

-keep class com.facebook.stetho.* { *; }
-dontwarn com.facebook.stetho.
*
-dontwarn kotlinx.atomicfu.AtomicFU`

project build.gradle

`// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
ext {
gradlePluginVersion = '3.1.3'
kotlinVersion = '1.3.30'
supportLibVersion = '27.1.1'
tagSoupVersion = '1.2.1'
glideVersion = '3.7.0'
picassoVersion = '2.5.2'
robolectricVersion = '3.5.1'
jUnitVersion = '4.12'
jSoupVersion = '1.10.3'
wordpressUtilsVersion = '1.21'
espressoVersion = '3.0.1'
daggerVersion = "2.15"
rxJavaVersion = "2.1.0"
rxAndroidVersion = "2.0.2"
work_version="1.0.0-beta01"
SERVER_URL = "SERVER_URL"
PROD_URL = '"https://gyanapp.in/"'
DEV_URL = '"https://ssr.gyanapp.in/"'
DEV_DYNAMIC_LINK = '"https://gyanappdev.page.link"'
PROD_DYNAMIC_LINK = '"https://gyan.page.link"'
DYNAMIC_LINK = "DYNAMIC_LINK"
roomVersion = '1.1.1'
archLifecycleVersion = '1.1.1'
coroutines = '1.2.1'
}
ext.kotlin_version = '1.3.21'

repositories {
    google()
    jcenter()
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
    classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'
    classpath 'com.google.gms:google-services:4.2.0'
    classpath 'com.google.firebase:firebase-plugins:1.2.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
    classpath 'com.appsee:appsee-plugin:+'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
configurations.all {
    resolutionStrategy {
        force 'net.sf.proguard:proguard-gradle:6.0.3'
    }
}

}

allprojects {
repositories {
google()
jcenter()
}
}

subprojects {
project.configurations.all {
resolutionStrategy.eachDependency { details ->
if (details.requested.group == 'com.android.support'
&& !details.requested.name.contains('multidex') ) {
details.useVersion "27.1.1"
}
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
`

Was this page helpful?
0 / 5 - 0 ratings

Related issues

altavir picture altavir  路  44Comments

Tolriq picture Tolriq  路  50Comments

LouisCAD picture LouisCAD  路  64Comments

elizarov picture elizarov  路  63Comments

streetsofboston picture streetsofboston  路  40Comments