在发布版本中找不到Android FileProvider类

Dra*_*tin 8 android proguard android-support-library

我正在使用FileProvider从设备中获取照片.实现在调试版本中运行得很好(minifyEnabled false)但是当我构建版本构建(minifyEnabled为true)时,我收到一个错误:

java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: 
java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" 
on path: DexPathList[[zip file "/data/app/com.package.name-2/base.apk"],
nativeLibraryDirectories=[/data/app/om.package.name-2/lib/arm, /vendor/lib, /system/lib]]
Run Code Online (Sandbox Code Playgroud)

所以我猜这与proguard设置有关

我有

compile 'com.android.support:support-v13:23.1.1'
Run Code Online (Sandbox Code Playgroud)

这是我的gradle文件中的v4的超集

minSdkVersion 21
targetSdkVersion 23
Run Code Online (Sandbox Code Playgroud)

和

-keep class android.support.v4.app.** { *; }
-keep class android.support.v4.content.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep interface android.support.v4.content.** { *; }
-keep class * extends android.content.ContentProvider
Run Code Online (Sandbox Code Playgroud)

在我的proguard-rules.pro文件中

我已经测试了Android 5和6,同样的事情发生了.任何建议都会有用,提前谢谢.

小智 16

以下对我有用:

在您的模块build.gradle文件中:

defaultConfig {
...
multiDexEnabled true
...
Run Code Online (Sandbox Code Playgroud)

}

然后:

dependencies {
...
compile 'com.android.support:multidex:1.0.2'
...
Run Code Online (Sandbox Code Playgroud)

}

最后,确保您的应用程序类具有以下之一:

A.如果您不扩展您的应用程序类:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">
    <application
            android:name="android.support.multidex.MultiDexApplication" >
        ...
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

B.如果您确实扩展了Application类,但可以更改基类:

public class MyApplication extends MultiDexApplication { ... }
Run Code Online (Sandbox Code Playgroud)

C.如果您确实扩展了Application类并且无法更改基类:

  public class MyApplication extends SomeOtherApplication {
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
}
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息:

https://developer.android.com/studio/build/multidex.html#mdex-gradle


Dar*_*ush 1

我正在使用androidx库并遇到同样的错误。所以,在 中AndroidManifest.xml,我更改了这一行:

android:name="android.support.v4.content.FileProvider"
Run Code Online (Sandbox Code Playgroud)

对此:

android:name="androidx.core.content.FileProvider"
Run Code Online (Sandbox Code Playgroud)