2016-02-26 12 views
5

Desidero risolvere alcune dipendenze nella mia applicazione solo se eseguo il debug della mia app, ad esempio voglio usare Stetho solo per il debug, non nella versione finale, come posso ottenere quella?Esecuzione di una classe App diversa nella mia applicazione (per il debug)

Ho provato a creare un'altra cartella denominata debug e creare DebugApp che si estende dalla mia app ma non so come eseguire questo DebugApp, forse dovrei aggiungere qualcosa in Gradle?

public class DebugApp extends App { 
    @Override 
    protected void init() { 
     super.init(); 
     DebugAppInitializer.initStetho(this); 
     DebugAppInitializer.initCrashczyk(this); 
    } 
} 

Sarebbe fantastico se riesco a collegarlo ai miei productFlavors

+1

Crea 'src/debug /' 'fianco src/main /'. Avere la propria 'Applicazione' nel gruppo di sorgenti' src/debug/'. Avere un file 'AndroidManifest.xml' nel gruppo di risorse' src/debug/'che estrae la tua applicazione' personalizzata'. – CommonsWare

+0

Quindi dovrei separare l'app di debug su un altro modulo? – henorek

+0

No, un set di sorgenti separato all'interno dello stesso modulo. [Questa app di esempio] (https://github.com/commonsguy/cw-omnibus/tree/master/Diagnostics/WebServer) dimostra l'idea, anche se in questo caso si aggiunge un'attività e un servizio alle build di 'debug' non una 'applicazione' personalizzata. – CommonsWare

risposta

8

Si può mettere il codice come questo:

if(BuildConfig.DEBUG){ 
... //debug init 
} else { 
....//release init 
} 

O

1) Creare struttura del progetto così:

enter image description here

2) Gradle sapori:

productFlavors { 
    driver { 
     applicationId "android.com.driver" 
     versionName "1.0" 
     buildConfigField "Boolean", "DRIVER_SESSION", "true" 
     minSdkVersion 16 
     targetSdkVersion 23 
    } 
    passenger { 
     applicationId "android.com.passenger" 
     versionName "1.0" 
     buildConfigField "Boolean", "DRIVER_SESSION", "false" 
     minSdkVersion 16 
     targetSdkVersion 23 
    } 
} 
sourceSets { 
    passenger { 
     manifest.srcFile 'src/passenger/AndroidManifest.xml' 
    } 
    driver { 
     manifest.srcFile 'src/driver/AndroidManifest.xml' 
    } 
} 

3) Necessità di creare classi differenti e mettere il nome dell'applicazione per ogni file manifesto:

manifesta nel pacchetto di driver ->

<application 
     android:name=".application.YourFirstAppInDriverPackage" 
     ... 
     > 

manifest in package passeggeri->

<application 
     android:name=".application.YourSecondAppInPassengerPackage" 
     ... 
     > 
Modalità

4) sviluppo commutazione tra due progetti:

enter image description here

+1

Sì, ma preferirei separarlo in un'altra cartella – henorek

-1

Credo che stai cercando questo: https://www.littlerobots.nl/blog/stetho-for-android-debug-builds-only/

TL; DR: Per attivare il tuo DebugApp avresti bisogno di ignorare il manifesto nella cartella debug come segue:

<manifest 
    package="com.mycompany" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <application 
     tools:replace="android:name" 
     android:name=".DebugApp"/> 

</manifest> 
Problemi correlati