2015-05-13 15 views
7

LeakCanary è una libreria di rilevamento perdite di memoria per Android e Java. LeakCanarycome utilizzare leakcanary, come aggiungere leakcanary come jar per creare un apk con file .mk

Il mio progetto si basa sul sistema di file Android make, che si basa su alcune interfacce interne Android e metodi personalizzati.

Come posso aggiungere il LeakCanary come una lib nella mia app per rilevare perdite di memoria.

La mia soluzione: Prima di tutto, devo costruire il LeakCanary come un file jar, ma come. poiché è una struttura di directory gradle e non ho mai usato Gradle prima.

Qualsiasi suggerimento è prezioso.

+0

Non tutte le librerie Android possono essere compilate in jar, in particolare quelle che utilizzano le risorse Android nella loro libreria (directory res). Puoi includere la libreria .aar nel tuo progetto? –

+0

Puoi costruire il tuo progetto con maven dalla riga di comando. Include LeakCanary come aar e costruisce apk con successo, che puoi installare manualmente in seguito. Ma se vuoi costruire da IDE, potrebbe non essere così semplice - leggi la mia risposta qui sotto. – Deepscorn

risposta

1

LeakCanary non è solo un JAR - contiene non solo il codice java, ma anche risorse (png per esempio). Se si utilizza ANT, l'unica cosa che si può fare è includere LeakCanary come progetto di libreria. Ma consiglio vivamente di passare a Gradle. Poiché il team di sviluppo di Android non supporterà l'importazione di alcuna libreria che non sia solo jar in alcun modo user-friendly nel prossimo futuro (perché gradle è la priorità). E importare come progetti di biblioteca è una procedura dolorosa, che diventa più dolorosa quando a volte arriva a includere le dipendenze della biblioteca anche come progetti di biblioteca. L'ho fatto a mano molto tempo fa solo perché il cliente usava Eclipse con formica per un grande progetto da secoli. In generale, è necessario effettuare le seguenti operazioni:

  1. Ottenere fonti: il codice sorgente, beni, risorse ...
  2. Indagare le dipendenze di LeakCanary. È possibile apparire "Modello oggetto POM" here.
  3. Per le dipendenze, che contengono più di un codice java, è necessario includerle nuovamente come libreria. Per gli altri, basta scaricarli come jar.
  4. Per le risorse (tipi di carattere, ad esempio), è necessario eseguire un ulteriore passaggio: è necessario copiarli nel progetto su cui si sta lavorando oppure si otterrà un'eccezione non trovata risorsa.
  5. Il passaggio finale è abilitare la fusione manifest. Aggiungere la seguente riga al project.properties del vostro progetto:

    manifestmerger.enabled = true

E 'fatto per unire tutte le AndroidManifest.xml dal progetto di libreria in apk finale.

+0

Ulteriori informazioni qui: https://commonsware.com/blog/2014/07/03/consuming-aars-eclipse.html. A proposito, ho provato il plugin Maven, menzionato qui circa sei mesi fa. Ma era bacato.Maven crea con successo un progetto con incluso aar dalla riga di comando, ma quando si è arrivati ​​all'integrazione di Eclipse, le cose si sono fatte strane: ho solo 1 build di successo per 10 esecuzioni senza modificare nulla. – Deepscorn

0

Quello che ti serve è installare gradle, quindi chiamare "gradle assembleRelease" nella libreria dir di leak canary. Se tutto va a trovare, si ottengono diversi file di aars nella directory di build/output. Queste sono librerie Android. Dovresti fare riferimento a loro come qualsiasi altra libreria Android.

5

Per Leak Canary, dovresti lavorare con Android Studio. In Android Studio, Nella tua build.gradle, aggiungere questo

dependencies { 
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' 
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' 
} 

E nella classe Application, aggiungere questa linea LeakCanary.install (questo); metodo onCreate() come questo

public class ExampleApplication extends Application { 

    @Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(this); 
    } 
} 

segui questo link https://github.com/square/leakcanary per maggiori dettagli.

Spero che questo possa essere utile.

+0

Ha funzionato come un incantesimo, grazie. Questa dovrebbe essere la risposta accettata in quanto è una risposta semplice, pulita e pulita. –

6

Questo è necessario per far parte della vostra applicazione in modo che la fuga di perdite funzioni.

public class ExampleApplication extends Application { 

@Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(this); 
} 
} 

ma questo è confusa perché la maggior parte di noi non scrivere questo tipo di classe che estende la classe applicazione direttamente, un lavoro in giro piuttosto una semplice dichiarazione risolverà questo problema,

public class YourClass extends Activity{//AppCompatActivity, A ctionBarActivity or anything 

@Override public void onCreate() { 
    super.onCreate(); 
    LeakCanary.install(getApplication()); 
} 
} 

speranza questo aiuta !!!

suo meglio chiamare questo metodo in

onPostCreate() 
0

Questa risposta è probabilmente troppo tardi per voi, ma potrebbe aiutare gli altri. È possibile aggiungere più progetti esposti tramite gradle in un progetto normale come file jar.

Gradle è solo uno strumento di creazione. Queste librerie java hanno bisogno di un mucchio di file jar alla fine della giornata. Quindi quello che faccio è il seguente ...

  1. Installare Android Studio se non è già il caso.
  2. Creare un progetto basato su gradli in cui è possibile aggiungere semplicemente le dipendenze necessarie.
  3. Sincronizzare il progetto in modo che elabori il file gradle e aggiorni le librerie esterne.
  4. Nell'esploratore di progetto, trovare ed espandere "Librerie esterne" e troverete i file jar.
  5. Copia i file jar ovunque sia necessario per averli in un altro progetto e voilà.

Ho eseguito questa operazione per importare le intere o talvolta parti della libreria di Google Play e molte altre librerie. In realtà, è una pratica comune per me.

Ora, come Deepscorn lo ha menzionato, noto che LeakCanary ha alcune res/cartelle che ovviamente contengono risorse Android ... e ho proprio bisogno di includere LeakCanary in Titanium SDK in questo momento. Quindi procederò allo stesso modo, ma questa volta aggiungerò le risorse nella cartella delle risorse del progetto in titanio e vedremo cosa succede.

Le risorse finiscono per essere incluse e disponibili nell'intero progetto. Non sono lontano dall'ambito delle risorse Android. Devi solo R ... o ... getIdentifier (...) per ottenerli.

È inoltre necessario assicurarsi che le voci di AndroidManifest vengano copiate in un file AndroidManifest che verrà compilato.

Inserirò i miei risultati qui se avrò tempo. Nel frattempo, chiunque può provare e pubblicare un feedback.