'u dahil et debugCompile
'u dependency
'u debug build
için kullanabileceğimi biliyorum. Gerekir code initialization
yapmak için iyi, akıcı bir yolu var mı? Bağımlılıklar olmadan diğer varyantlar derlenemez.Stetho yalnızca hata ayıklama oluşturma varyantında
cevap
Birkaç seçeneğiniz var.
Seçenek 1: Tüm ayıklama kurar için Application
sınıfta başlatmak sadece ve (compile
yerine debugCompile
kullanarak) oluşturur için Stetho ekleyin.
Bunu yapmak oldukça kolaydır. ayıklama kurar için Sadece Stetho içerir ve hata ayıklama ve sürüm yapılarında için farklı Application
sınıfları oluşturmak:
if (BuildConfig.DEBUG) {
Stetho.initialize(
Stetho.newInitializerBuilder(this)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
.build()
);
}
Seçenek 2: Application
sınıfında, şöyle BuildConfig.DEBUG
kontrol edin.
Gradle sayesinde, uygulamalar farklı derleme varyantları için farklı kaynak kümelerine sahip olabilir. Eğer üç farklı kaynak setine sahip olabilir Varsayılan olarak, sen bırakma ve hata ayıklama oluşturma türleri vardır:
- hata ayıklama yalnızca hata ayıklama istediğiniz kodu için sadece sürümde istediğiniz kodu için
- salınımını kurar kurar tüm istediğiniz kodu için
- ana
Başvurunuz koduolası tüm şu anda inşakaynak kümesi. Uygulamanızdaki main
klasörünün yanındaki debug
adlı yeni bir klasör oluşturabilir ve hata ayıklama yapıları için eklemek istediğiniz her şey için main
klasörünüzün yapısını yansıtabilirsiniz.
Bu durumda, main
kaynak kümenizde Stetho'ya hiç başvurmayan bir Application
sınıfı olmasını istiyorsunuz.
Ardından, normalde yaptığınız gibi Stetho'yu başlatan debug
kaynak kümenizde bir Application
sınıfı olmasını istiyorsunuz.
Bu kurulumun bir örneğini Stetho sample'da görebilirsiniz. Spesifik olarak, here's the main Application class ve here's the debug Application class. Ayrıca, hangi uygulama sınıfının kullanılacağını seçen her kaynak kümesinde bildirimler oluşturduğunu unutmayın.
AFAIK, ilk yaklaşım 'debugCompile' ile çalışmayacaktır, çünkü bu kod 'main' içinde olacaktır ve bağımlılık' main' içinde olmayacaktır. – CommonsWare
doğru-bu yüzden "Bu için Stetho dahil ilds- "Bunun debugCompile" yerine "derlemek" anlamına geldiği daha açık olmalıydım. Teşekkürler! –
Şahsen ikinci yöntemi tercih ederim çünkü stetho kodunuz sonlandırılmamış olabilir. Dumpapps, ağ bağlantısı kullanmak isteyebilirsiniz ve üretimde denenmemiş/hata ayıklama kodunu göndermek istemezsiniz. –
@Tanis yanıtını kontrol edin.
sadece ayıklama sürümü üzerine kütüphane ekleyin:Ayrıca böyle bir şey kullanabilirsiniz.
dependencies {
debugCompile 'com.facebook.stetho:stetho:1.1.1
}
sizin Başvurusunda yapabileceğiniz:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
StethoUtils.install(this);
}
}
Sonra hata ayıklama/release sürümünde farklı
StethoUtils
sınıf oluşturabilirsiniz.
src/release/java/
public class StethoUtils{
public static void install(Application application){
// do nothing
}
}
yılında src/debug/java/
public class StethoUtils{
public static void install(Application application){
Stetho.initialize(
Stetho.newInitializerBuilder(application)
.enableDumpapp(Stetho.defaultDumperPluginsProvider(application))
.enableWebKitInspector(Stetho.defaultInspectorModulesProvider(application))
.build());
}
}
yılında
bir perferct fikir olabilir java yansıması kullanma:
:private void initStetho() {
if (BuildConfig.DEBUG) {
try {
Class<?> stethoClazz = Class.forName("com.facebook.stetho.Stetho");
Method method = stethoClazz.getMethod("initializeWithDefaults",Context.class);
method.invoke(null, this);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
sonra stetho derlemek debug
Muhtemelen tüm bu istisnaları yakalamak veya bir dizeyle bir sınıf yüklemek istemiyorum (paket adı değişebilir). Çok daha temiz çözüm, gerektiğinde gradiyeyi kullanmak ve bir debug varyantı enjekte etmektir. – Aceofspadez44
Yansıma yönteminin en kolay olanı olduğuna inanıyorum ve kodun etrafında kod yazmadan bir Stetho kodunun sürüm oluşturmada bulunmadığını garanti ediyorum – for3st
- 1. Firefox'taki hata ayıklama hata ayıklama
- 2. ReportMemoryLeaksOnShutdown yalnızca hata ayıklama modunda nasıl etkinleştirilir?
- 3. Web işçilerini hata ayıklama ve profil oluşturma
- 4. Profil hata ayıklama veya sürüm oluşturma?
- 5. ayıklama fasulye oluşturma
- 6. Win32 Hata Ayıklama Makroları
- 7. Hata ayıklama gist-vim
- 8. Hata ayıklama Ember.js'den chrome
- 9. ASP.Net Core, bir hata ayıklayıcıda hata ayıklama değil hata ayıklama
- 10. WP7 uygulaması hata ayıklama sırasında yalnızca emülatörde ve aygıtta çalışıyor
- 11. Uygulamam IE'de yalnızca hata ayıklama modunda çalışıyor (diğer tarayıcılarda çalışır)
- 12. Visual Studio'da yalnızca bir iş parçacığında hata ayıklama
- 13. Hata ayıklama Trace in C#
- 14. Hata ayıklama foreach
- 15. Qt Creator'da hata ayıklama var
- 16. Özel bir parçacık hata ayıklama
- 17. Hata ayıklama konsolu panoya kopyala
- 18. Hata ayıklama üzerinde uygulama, hata ayıklama sırasında değil
- 19. Eclipse kısayolu "hata ayıklama son hata ayıklama yapılandırması" (F11 değil)
- 20. Eclipse Java Hata ayıklama dosyaları ile hata ayıklama
- 21. Hata ayıklama, sürüm
- 22. Hata ayıklama Java yöntemi
- 23. Xcode C++ hata ayıklama
- 24. Hata ayıklama döngüleri
- 25. Hata ayıklama 403'ler?
- 26. Hata ayıklama metaprogramları
- 27. Hata ayıklama outofmemoryexception
- 28. ASP.NET'te hata ayıklama ASP.NET
- 29. Hata ayıklama getResource *
- 30. PyCharm JavaScript Hata ayıklama
Bu biraz karmaşıktır çünkü uygulamanız başladığında stetho başlatmanız/başlatmanız ve http istemcinizi stetho'ya iletmek üzere yapılandırmanız gerekir. Bunu, sınıflarınızın belirli sürümlerini hata ayıklama ve serbest bırakma kaynak klasörlerinde yaparak yapabilirsiniz, bu ideali bulamıyorum, ancak – njzk2
çalışır. Manşondan "debug" kaynak kümesinde, özel bir "Uygulama" sınıfı oluşturun. ya da "Uygulamayı" (eğer başka bir yerde genişletmiyorsanız) veya özel "Uygulamanızı" (eğer ana kodunuzda kullanıyorsanız) genişletir. "Uygulamanızın" android: name: ''' 'debug' tezahürüdür.Gelişmiş bir 'Uygulama' normalde kullandığınız durumda, muhtemelen 'main' resourceet'inde bulunan 'debug' sourceetini anlatmak için bir 'tools: replaceNode' özniteliğine ihtiyacınız olacaktır. Yine de bunu denemedim: – CommonsWare