2016-01-13 13 views
7

Sto utilizzando un FileProvider per ottenere foto dal dispositivo. L'implementazione funziona bene nella build di debug (minifyEnabled false), ma quando sto costruendo la build di rilascio (minifyEnabled vero) ottengo un errore:Classe FileProvider Android non trovata nelle build di release

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]] 

quindi credo che questo ha someting a che fare con la messa a punto Proguard

ho

compile 'com.android.support:support-v13:23.1.1' 

che è un superset di v4 nel mio file Gradle e

minSdkVersion 21 
targetSdkVersion 23 

e

-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 

nel mio file proguard-rules.pro

Ho testato sia con Android 5 e 6 e la stessa cosa accade. Qualsiasi suggerimento sarebbe utile, grazie in anticipo.

+0

Date un'occhiata a questo link. Potrebbe aiutarti. [https://stackoverflow.com/a/44458490/2054348](https://stackoverflow.com/a/44458490/2054348) –

risposta

1

Dopo un paio d'ore di più googling in giro che ho finito per l'aggiornamento Gradle e servizi Google per

dependencies { 
    classpath 'com.android.tools.build:gradle:1.5.0' 
    classpath 'com.google.gms:google-services:1.5.0' 
} 

in precedenza la versione software

classpath 'com.android.tools.build:gradle:1.3.0' 
    classpath 'com.google.gms:google-services:1.5.0-beta2' 

immagino ci deve essere qualcosa con la libreria di servizi di google

+3

Che cosa fa ** com.google.gms: google-services ** con 'android.support.v4.content.FileProvider'? –

+3

Vorrei anche saperlo :)) – DraganescuValentin

-1
java.lang.RuntimeException: Unable to get provider android.support.v4.content.FileProvider: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.FileProvider" 

non è correlato alla programmazione se funziona g in precedenza con una configurazione corretta.

Controlla questo link se ne aiuta qualcuno in qualche modo.

File Provider Class not found issue resolved

6

Di seguito ha lavorato per me:

Nel modulo di file build.gradle:

defaultConfig { 
... 
multiDexEnabled true 
... 

}

Poi:

dependencies { 
... 
compile 'com.android.support:multidex:1.0.2' 
... 

}

E, infine, assicurarsi che la classe di applicazione ha una delle seguenti opzioni:

A. Se lo fai non estendere la classe di applicazione:

<?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>

B.Se fai estendere la classe di applicazione e, ma può cambiare la classe base:

public class MyApplication extends MultiDexApplication { ... } 

C. Se fai estendere la classe di applicazione e non può cambiare la classe base:

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

Per maggiori info:

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