0
大家好,我想用構建變體版本構建我的apk但面臨一些錯誤。我也嘗試使用-keep,-keepclassmember ,-keepclasseswithmembers和-dontwarn在proguard-rules.pro中,但無法獲得任何解決方案。我沒有默認的proguard-rules.pro,所以我從另一個項目中複製了它。我想知道如何構建我的apk發佈。當使用proguard和build-variant構建apk時出現錯誤android
**This is my build.gradle file**
apply plugin: 'com.android.application' android {
signingConfigs {
config {
keyAlias 'KeyAlias'
keyPassword 'password'
storeFile 'keycorner.jks'
storePassword 'password'
}
}
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.demo"
minSdkVersion 11
targetSdkVersion 23
multiDexEnabled true
}
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
lintOptions {
disable "ResourceType"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
**These are the warning coming:-**
Note: duplicate definition of library class [android.net.http.SslCertificate]
Note: duplicate definition of library class [android.net.http.SslError]
Note: duplicate definition of library class [android.net.http.SslCertificate$DName]
Note: duplicate definition of library class [org.apache.http.conn.scheme.SocketFactory]
Note: duplicate definition of library class [org.apache.http.conn.scheme.HostNameResolver]
Note: duplicate definition of library class [org.apache.http.conn.ConnectTimeoutException]
Note: duplicate definition of library class [org.apache.http.params.HttpParams]
Note: there were 7 duplicate class definitions.
(http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)
Initializing...
Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService'
Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService'
Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService'
Note: android.support.v4.app.NotificationCompatJellybean calls 'Field.getType'
Note: com.google.android.gms.internal.zzsv calls 'Field.getType'
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.sim.Fingerprint
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.data.sim.HostedPaymentFormSettings
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.data.sim.HostedReceiptPageSettings
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.sim.LinkMethod
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.data.sim.HostedReceiptPageSettings
Warning:net.authorize.sim.Transaction: can't find referenced class net.authorize.sim.button.Button
Warning:net.authorize.sim.Transaction: can't find referenced class
Note: the configuration keeps the entry point 'android.support.design.widget.NavigationView { void setNavigationItemSelectedListener(android.support.design.widget.NavigationView$OnNavigationItemSelectedListener); }', but not the descriptor class 'android.support.design.widget.NavigationView$OnNavigationItemSelectedListener'
Note: the configuration keeps the entry point 'android.support.design.widget.Snackbar$SnackbarLayout { void setOnLayoutChangeListener(android.support.design.widget.Snackbar$SnackbarLayout$OnLayoutChangeListener); }', but not the descriptor class 'android.support.design.widget.Snackbar$SnackbarLayout$OnLayoutChangeListener'
Note: the configuration keeps the entry point 'android.support.design.widget.Snackbar$SnackbarLayout { void setOnAttachStateChangeListener(android.support.design.widget.Snackbar$SnackbarLayout$OnAttachStateChangeListener); }', but not the descriptor class 'android.support.design.widget.Snackbar$SnackbarLayout$OnAttachStateChangeListener'
Note: the configuration keeps the entry point 'android.support.design.widget.TabLayout { void setOnTabSelectedListener(android.support.design.widget.TabLayout$OnTabSelectedListener); }', but not the descriptor class 'android.support.design.widget.TabLayout$OnTabSelectedListener'
Note: the configuration keeps the entry point 'android.support.design.widget.TabLayout { void setTabsFromPagerAdapter(android.support.v4.view.PagerAdapter); }', but not the descriptor class 'android.support.v4.view.PagerAdapter'
Note: the configuration keeps the entry point 'android.support.v4.app.FragmentTabHost { void setup(android.content.Context,android.support.v4.app.FragmentManager); }', but not the descriptor class 'android.support.v4.app.FragmentManager'
Note: the configuration keeps the entry point 'android.support.v4.app.FragmentTabHost { void setup(android.content.Context,android.support.v4.app.FragmentManager,int); }', but not the descriptor class 'android.support.v4.app.FragmentManager'
Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager { void setAdapter(android.support.v4.view.PagerAdapter); }', but not the descriptor class 'android.support.v4.view.PagerAdapter'
Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager { void setOnAdapterChangeListener(android.support.v4.view.ViewPager$OnAdapterChangeListener); }', but not the descriptor class 'android.support.v4.view.ViewPager$OnAdapterChangeListener'
Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager { void setOnPageChangeListener(android.support.v4.view.ViewPager$OnPageChangeListener); }', but not the descriptor class 'android.support.v4.view.ViewPager$OnPageChangeListener'
Note: the configuration keeps the entry point 'android.support.v4.view.ViewPager { void setPageTransformer(boolean,android.support.v4.view.ViewPager$PageTransformer); }', but not the descriptor class 'android.support.v4.view.ViewPager$PageTransformer'
Note: the configuration keeps the entry point 'android.support.v4.widget.DrawerLayout { void setDrawerListener(android.support.v4.widget.DrawerLayout$DrawerListener); }', but not the descriptor class 'android.support.v4.widget.DrawerLayout$DrawerListener'
Note: the configuration keeps the entry point 'android.support.v4.widget.NestedScrollView { void setOnScrollChangeListener(android.support.v4.widget.NestedScrollView$OnScrollChangeListener); }', but not the descriptor class 'android.support.v4.widget.NestedScrollView$OnScrollChangeListener'
Note: the configuration keeps the entry point 'android.support.v4.widget.SlidingPaneLayout { void setPanelSlideListener(android.support.v4.widget.SlidingPaneLayout$PanelSlideListener); }', but not the descriptor class 'android.support.v4.widget.SlidingPaneLayout$PanelSlideListener'
Note: the configuration keeps the entry point 'android.support.v4.widget.SwipeRefreshLayout { void setOnRefreshListener(android.support.v4.widget.SwipeRefreshLayout$OnRefreshListener); }', but not the descriptor class 'android.support.v4.widget.SwipeRefreshLayout$OnRefreshListener'
Note: the configuration keeps the entry point 'android.support.v7.app.MediaRouteButton { void setRouteSelector(android.support.v7.media.MediaRouteSelector); }', but not the descriptor class 'android.support.v7.media.MediaRouteSelector'
Note: the configuration keeps the entry point 'android.support.v7.app.MediaRouteButton { void setDialogFactory(android.support.v7.app.MediaRouteDialogFactory); }', but not the descriptor class 'android.support.v7.app.MediaRouteDialogFactory'
Note: the configuration keeps the entry point 'android.support.v7.view.menu.ActionMenuItemView { void setItemInvoker(android.support.v7.view.menu.MenuBuilder$ItemInvoker); }', but not the descriptor class 'android.support.v7.view.menu.MenuBuilder$ItemInvoker'
Note: the configuration keeps the entry point 'android.support.v7.view.menu.ActionMenuItemView { void setPopupCallback(android.support.v7.view.menu.ActionMenuItemView$PopupCallback); }', but not the descriptor class 'android.support.v7.view.menu.ActionMenuItemView$PopupCallback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionBarOverlayLayout { void setActionBarVisibilityCallback(android.support.v7.widget.ActionBarOverlayLayout$ActionBarVisibilityCallback); }', but not the descriptor class 'android.support.v7.widget.ActionBarOverlayLayout$ActionBarVisibilityCallback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionBarOverlayLayout { void setMenu(android.view.Menu,android.support.v7.view.menu.MenuPresenter$Callback); }', but not the descriptor class 'android.support.v7.view.menu.MenuPresenter$Callback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionMenuView { void setPresenter(android.support.v7.widget.ActionMenuPresenter); }', but not the descriptor class 'android.support.v7.widget.ActionMenuPresenter'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionMenuView { void setOnMenuItemClickListener(android.support.v7.widget.ActionMenuView$OnMenuItemClickListener); }', but not the descriptor class 'android.support.v7.widget.ActionMenuView$OnMenuItemClickListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionMenuView { void setMenuCallbacks(android.support.v7.view.menu.MenuPresenter$Callback,android.support.v7.view.menu.MenuBuilder$Callback); }', but not the descriptor class 'android.support.v7.view.menu.MenuPresenter$Callback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActionMenuView { void setMenuCallbacks(android.support.v7.view.menu.MenuPresenter$Callback,android.support.v7.view.menu.MenuBuilder$Callback); }', but not the descriptor class 'android.support.v7.view.menu.MenuBuilder$Callback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActivityChooserView { void setActivityChooserModel(android.support.v7.widget.ActivityChooserModel); }', but not the descriptor class 'android.support.v7.widget.ActivityChooserModel'
Note: the configuration keeps the entry point 'android.support.v7.widget.ActivityChooserView { void setProvider(android.support.v4.view.ActionProvider); }', but not the descriptor class 'android.support.v4.view.ActionProvider'
Note: the configuration keeps the entry point 'android.support.v7.widget.ContentFrameLayout { void setAttachListener(android.support.v7.widget.ContentFrameLayout$OnAttachListener); }', but not the descriptor class 'android.support.v7.widget.ContentFrameLayout$OnAttachListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.FitWindowsFrameLayout { void setOnFitSystemWindowsListener(android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener); }', but not the descriptor class 'android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.FitWindowsLinearLayout { void setOnFitSystemWindowsListener(android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener); }', but not the descriptor class 'android.support.v7.widget.FitWindowsViewGroup$OnFitSystemWindowsListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setAccessibilityDelegateCompat(android.support.v7.widget.RecyclerViewAccessibilityDelegate); }', but not the descriptor class 'android.support.v7.widget.RecyclerViewAccessibilityDelegate'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setAdapter(android.support.v7.widget.RecyclerView$Adapter); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$Adapter'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setRecyclerListener(android.support.v7.widget.RecyclerView$RecyclerListener); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$RecyclerListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$LayoutManager'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setRecycledViewPool(android.support.v7.widget.RecyclerView$RecycledViewPool); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$RecycledViewPool'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setViewCacheExtension(android.support.v7.widget.RecyclerView$ViewCacheExtension); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$ViewCacheExtension'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setChildDrawingOrderCallback(android.support.v7.widget.RecyclerView$ChildDrawingOrderCallback); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$ChildDrawingOrderCallback'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setOnScrollListener(android.support.v7.widget.RecyclerView$OnScrollListener); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$OnScrollListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.RecyclerView { void setItemAnimator(android.support.v7.widget.RecyclerView$ItemAnimator); }', but not the descriptor class 'android.support.v7.widget.RecyclerView$ItemAnimator'
Note: the configuration keeps the entry point 'android.support.v7.widget.SearchView { void setOnQueryTextListener(android.support.v7.widget.SearchView$OnQueryTextListener); }', but not the descriptor class 'android.support.v7.widget.SearchView$OnQueryTextListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.SearchView { void setOnCloseListener(android.support.v7.widget.SearchView$OnCloseListener); }', but not the descriptor class 'android.support.v7.widget.SearchView$OnCloseListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.SearchView { void setOnSuggestionListener(android.support.v7.widget.SearchView$OnSuggestionListener); }', but not the descriptor class 'android.support.v7.widget.SearchView$OnSuggestionListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.SearchView { void setSuggestionsAdapter(android.support.v4.widget.CursorAdapter); }', but not the descriptor class 'android.support.v4.widget.CursorAdapter'
Note: the configuration keeps the entry point 'android.support.v7.widget.Toolbar { void setMenu(android.support.v7.view.menu.MenuBuilder,android.support.v7.widget.ActionMenuPresenter); }', but not the descriptor class 'android.support.v7.view.menu.MenuBuilder'
Note: the configuration keeps the entry point 'android.support.v7.widget.Toolbar { void setMenu(android.support.v7.view.menu.MenuBuilder,android.support.v7.widget.ActionMenuPresenter); }', but not the descriptor class 'android.support.v7.widget.ActionMenuPresenter'
Note: the configuration keeps the entry point 'android.support.v7.widget.Toolbar { void setOnMenuItemClickListener(android.support.v7.widget.Toolbar$OnMenuItemClickListener); }', but not the descriptor class 'android.support.v7.widget.Toolbar$OnMenuItemClickListener'
Note: the configuration keeps the entry point 'android.support.v7.widget.Toolbar { void setMenuCallbacks(android.support.v7.view.menu.MenuPresenter$Callback,android.support.v7.view.menu.MenuBuilder$Callback); }', but not the descriptor class 'android.support.v7.view.menu.MenuPresenter$Callback'
Note: the configuration keeps the entry point 'android.support.v7.widget.Toolbar { void setMenuCallbacks(android.support.v7.view.menu.MenuPresenter$Callback,android.support.v7.view.menu.MenuBuilder$Callback); }', but not the descriptor class 'android.support.v7.view.menu.MenuBuilder$Callback'
Note: the configuration keeps the entry point 'android.support.v7.widget.ViewStubCompat { void setOnInflateListener(android.support.v7.widget.ViewStubCompat$OnInflateListener); }', but not the descriptor class 'android.support.v7.widget.ViewStubCompat$OnInflateListener'
Note: the configuration keeps the entry point 'com.android.volley.toolbox.NetworkImageView { void setImageUrl(java.lang.String,com.android.volley.toolbox.ImageLoader); }', but not the descriptor class 'com.android.volley.toolbox.ImageLoader'
Note: the configuration keeps the entry point 'com.facebook.FacebookButtonBase { void setFragment(android.support.v4.app.Fragment); }', but not the descriptor class 'android.support.v4.app.Fragment'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setDefaultAudience(com.facebook.login.DefaultAudience); }', but not the descriptor class 'com.facebook.login.DefaultAudience'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setLoginBehavior(com.facebook.login.LoginBehavior); }', but not the descriptor class 'com.facebook.login.LoginBehavior'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setToolTipStyle(com.facebook.login.widget.ToolTipPopup$Style); }', but not the descriptor class 'com.facebook.login.widget.ToolTipPopup$Style'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setToolTipMode(com.facebook.login.widget.LoginButton$ToolTipMode); }', but not the descriptor class 'com.facebook.login.widget.LoginButton$ToolTipMode'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setProperties(com.facebook.login.widget.LoginButton$LoginButtonProperties); }', but not the descriptor class 'com.facebook.login.widget.LoginButton$LoginButtonProperties'
Note: the configuration keeps the entry point 'com.facebook.login.widget.LoginButton { void setLoginManager(com.facebook.login.LoginManager); }', but not the descriptor class 'com.facebook.login.LoginManager'
Note: the configuration keeps the entry point 'com.facebook.login.widget.ProfilePictureView { void setOnErrorListener(com.facebook.login.widget.ProfilePictureView$OnErrorListener); }', but not the descriptor class 'com.facebook.login.widget.ProfilePictureView$OnErrorListener'
Note: the configuration keeps the entry point 'com.facebook.share.internal.LikeBoxCountView { void setCaretPosition(com.facebook.share.internal.LikeBoxCountView$LikeBoxCountViewCaretPosition); }', but not the descriptor class 'com.facebook.share.internal.LikeBoxCountView$LikeBoxCountViewCaretPosition'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setObjectIdAndType(java.lang.String,com.facebook.share.widget.LikeView$ObjectType); }', but not the descriptor class 'com.facebook.share.widget.LikeView$ObjectType'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setLikeViewStyle(com.facebook.share.widget.LikeView$Style); }', but not the descriptor class 'com.facebook.share.widget.LikeView$Style'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setAuxiliaryViewPosition(com.facebook.share.widget.LikeView$AuxiliaryViewPosition); }', but not the descriptor class 'com.facebook.share.widget.LikeView$AuxiliaryViewPosition'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setHorizontalAlignment(com.facebook.share.widget.LikeView$HorizontalAlignment); }', but not the descriptor class 'com.facebook.share.widget.LikeView$HorizontalAlignment'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setOnErrorListener(com.facebook.share.widget.LikeView$OnErrorListener); }', but not the descriptor class 'com.facebook.share.widget.LikeView$OnErrorListener'
Note: the configuration keeps the entry point 'com.facebook.share.widget.LikeView { void setFragment(android.support.v4.app.Fragment); }', but not the descriptor class 'android.support.v4.app.Fragment'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setPlayStorePurchaseParams(com.google.android.gms.ads.purchase.PlayStorePurchaseListener,java.lang.String); }', but not the descriptor class 'com.google.android.gms.ads.purchase.PlayStorePurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setInAppPurchaseListener(com.google.android.gms.ads.purchase.InAppPurchaseListener); }', but not the descriptor class 'com.google.android.gms.ads.purchase.InAppPurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.AdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setInAppPurchaseListener(com.google.android.gms.ads.purchase.InAppPurchaseListener); }', but not the descriptor class 'com.google.android.gms.ads.purchase.InAppPurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.BaseAdView { void setPlayStorePurchaseParams(com.google.android.gms.ads.purchase.PlayStorePurchaseListener,java.lang.String); }', but not the descriptor class 'com.google.android.gms.ads.purchase.PlayStorePurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setPlayStorePurchaseParams(com.google.android.gms.ads.purchase.PlayStorePurchaseListener,java.lang.String); }', but not the descriptor class 'com.google.android.gms.ads.purchase.PlayStorePurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setInAppPurchaseListener(com.google.android.gms.ads.purchase.InAppPurchaseListener); }', but not the descriptor class 'com.google.android.gms.ads.purchase.InAppPurchaseListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setAdSize(com.google.android.gms.ads.AdSize); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.NativeExpressAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAdListener(com.google.android.gms.ads.AdListener); }', but not the descriptor class 'com.google.android.gms.ads.AdListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAdSizes(com.google.android.gms.ads.AdSize[]); }', but not the descriptor class 'com.google.android.gms.ads.AdSize'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setAppEventListener(com.google.android.gms.ads.doubleclick.AppEventListener); }', but not the descriptor class 'com.google.android.gms.ads.doubleclick.AppEventListener'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setCorrelator(com.google.android.gms.ads.Correlator); }', but not the descriptor class 'com.google.android.gms.ads.Correlator'
Note: the configuration keeps the entry point 'com.google.android.gms.ads.doubleclick.PublisherAdView { void setOnCustomRenderedAdLoadedListener(com.google.android.gms.ads.doubleclick.OnCustomRenderedAdLoadedListener); }', but not the descriptor class 'com.google.android.gms.ads.doubleclick.OnCustomRenderedAdLoadedListener'
(http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)
Note: there were 2 classes trying to access generic signatures using reflection.
You should consider keeping the signature attributes
(using '-keepattributes Signature').
(http://proguard.sourceforge.net/manual/troubleshooting.html#attributes)
Note: there were 87 unkept descriptor classes in kept class members.
You should consider explicitly keeping the mentioned classes
(using '-keep').
(http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)
Note: there were 80 library classes explicitly being kept.
You don't need to keep library classes; they are already left unchanged.
(http://proguard.sourceforge.net/manual/troubleshooting.html#libraryclass)
Note: there were 20 unresolved dynamic references to classes or interfaces.
You should check if you need to specify additional program jars.
(http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)
Warning:there were 49 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:Exception while processing task java.io.IOException: Please correct the above warnings first.
:app:transformClassesAndResourcesWithProguardForRelease FAILED
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> java.io.IOException: Please correct the above warnings first.
Information:BUILD FAILED
Information:Total time: 15.407 secs
Information:1 error
Information:25 warnings
Information:See complete output in console
沒有你不能建立apk與釋放,如果你想釋放apk然後生成簽名的apk .. –