添加Kotlin协程和房间后,我无法发布版本,请帮助我。
app / prguard-rules.pro
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
# Glide
-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 *; }
#dagger
-dontwarn com.google.errorprone.annotations.**
#facebook
-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
#retrofit
# Retrofit does reflection on generic parameters and InnerClass is required to use Signature.
-keepattributes Signature, InnerClasses
# Retain service method parameters when optimizing.
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@retrofit2.http.* <methods>;
}
# Ignore annotation used for build tooling.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# Ignore JSR 305 annotations for embedding nullability information.
-dontwarn javax.annotation.**
# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
-dontwarn kotlin.Unit
# Top-level functions that can only be used by Kotlin.
-dontwarn retrofit2.-KotlinExtensions
-dontwarn okio.**
# lifecycle
-keepattributes *Annotation*
-keepclassmembers enum android.arch.lifecycle.Lifecycle$Event {
<fields>;
}
-keep class * implements android.arch.lifecycle.LifecycleObserver {
}
-keep class * implements android.arch.lifecycle.GeneratedAdapter {
<init>(...);
}
-keepclassmembers class ** {
@android.arch.lifecycle.OnLifecycleEvent *;
}
#crashlytics
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
## Google Play Services 4.3.23 specific rules ##
## https://developer.android.com/google/play-services/setup.html#Proguard ##
-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;
}
# Parceler library
-keep interface org.parceler.Parcel
-keep @org.parceler.Parcel class * { *; }
-keep class **$$Parcelable { *; }
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
public *;
}
# Uncomment this to preserve the line number information for
# debugging stack traces.
-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keep class com.firebase.** { *; }
-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.**
# Only necessary if you downloaded the SDK jar directly instead of from maven.
-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
#Appsee
-keep class com.appsee.** { *; }
-dontwarn com.appsee.**
-keep class android.support.** { *; }
-keep interface android.support.** { *; }
-keep class androidx.** { *; }
-keep interface androidx.** { *; }
#UXCam
-keep class com.uxcam.** { *; }
-dontwarn com.uxcam.**
# For CleverTap SDK
-dontwarn com.clevertap.android.sdk.**
# ServiceLoader support
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
-keepnames class kotlinx.coroutines.android.AndroidExceptionPreHandler {}
-keepnames class kotlinx.coroutines.android.AndroidDispatcherFactory {}
# Most of volatile fields are updated with AFU and should not be mangled
-keepclassmembernames class kotlinx.** {
volatile <fields>;
}
-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 <methods>;
}
-keepclassmembers class kotlin.Metadata {
public <methods>;
}
-keepclassmembers class **$WhenMappings {
<fields>;
}
-dontwarn android.arch.util.paging.CountedDataSource
-dontwarn android.arch.persistence.room.paging.LimitOffsetDataSource
-keep class com.facebook.stetho.** { *; }
-dontwarn com.facebook.stetho.**
我的build.gradle文件(应用模块)
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:5.3.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"
}
}
与以前的版本相比,我更改了Firebase版本,添加了kotlin协程并增加了空间:与以前的版本相比,我在代码中添加了这些内容:
apply plugin: 'kotlin-kapt'
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
kapt 'android.arch.lifecycle:extensions:1.1.1'
implementation 'com.google.firebase:firebase-core:16.0.8'(previous it was
16.0.5)
implementation 'com.google.firebase:firebase-messaging:17.6.0'
implementation 'com.google.android.gms:play-services-gcm:16.1.0'
implementation 'com.google.firebase:firebase-dynamic-links:16.1.3' implementation 'com.google.firebase:firebase-dynamic-links:16.1.8'
implementation "com.google.firebase:firebase-invites:16.0.5" implementation "com.google.firebase:firebase-invites:16.1.1"
implementation 'com.google.firebase:firebase-perf:16.2.0' implementation 'com.google.firebase:firebase-perf:16.2.5'
/ 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'
kotlin {
experimental {
coroutines "enable"
}
}
在构建发布版本时,我收到以下警告:
Warning: there were 11 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.
these are warnings in red in Message view :
Warning: kotlinx.coroutines.flow.FlowKt__MergeKt: can't find referenced class kotlinx.atomicfu.AtomicBoolean
这些是我认为的11个,其中proguard只是在谈论htese警告,请请帮助
答案 0 :(得分:1)
这是最常见的错误,因为“许多预编译的第三方库都引用了其他实际未使用并因此不存在的库。这在调试版本中工作正常,但在发行版本中,ProGuard期望所有库”,因此它可以执行适当的静态分析。
因此,您可以忽略它或在proguard-rules.pro中写上-dontwarn
。
-dontwarn kotlinx.atomicfu.**
答案 1 :(得分:0)
编写保护规则
-ignorewarnings
答案 2 :(得分:0)
这对我有用,不知道导致错误的原因是什么,为什么科特林团队留下了这样的错误:
-dontwarn kotlinx。**