Lynx is an Android library created to show a custom view with all the information Android logcat is printing, different traces of different levels will be rendererd to show from log messages to your application exceptions. You can filter this traces, share your logcat to other apps, configure the max number of traces to show or the sampling rate used by the library.

Related tags

Debugging Tools Lynx
Overview

Lynx Build Status Maven Central Android Arsenal

Are you bored of connect your device to your computer to know what's happening inside your app? If you hate it, this is going to be your favorite library. Shake your phone, press a button or add a LynxView to your layouts and you'll see what Andoird logcat is printing :)

Lynx is an Android library created to show a custom view with all the information logcat is printing, different traces of different levels will be rendererd to show from log messages to your application exceptions. You can filter this traces (using regular expressions if you want), share your logcat to other apps, configure the max number of traces to show or the sampling rate used by the library. The min Api Level supported is 10.

Screenshots

Demo Screenshot

Usage

To use Lynx Android library and get your logcat inside your app you can use different approaches:

    1. Start LynxActivity using a LynxConfig object.
private void openLynxActivity() {
    LynxConfig lynxConfig = new LynxConfig();
    lynxConfig.setMaxNumberOfTracesToShow(4000)
        .setFilter("WTF");

    Intent lynxActivityIntent = LynxActivity.getIntent(this, lynxConfig);
    startActivity(lynxActivityIntent);
  }
    1. Configure LynxShakeDetector to start LynxActivity if you shake your phone.
public class YourApplication extends Application {

  @Override public void onCreate() {
    super.onCreate();
    LynxShakeDetector lynxShakeDetector = new LynxShakeDetector(this);
    lynxShakeDetector.init();
  }
}
    1. Add LynxView to your layouts and configure it as you wish.
<com.github.pedrovgs.lynx.LynxView
      xmlns:lynx="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="@dimen/lynx_view_height"
      lynx:filter="Lynx"
      lynx:max_traces_to_show="1500"
      lynx:text_size="12sp"/>

You can provide different configurations based on styleable attributes:

  • Filter to apply by default: lynx:filter="Lynx"
  • Max number of traces to show inside LynxView: lynx:max_traces_to_show=3000
  • Text size used to render traces inside LynxView: lynx:text_size="12sp
  • Sampling rate used to read from the application log: lynx:sampling_rate=200

To be able to show LynxActivity shaking your phone or starting it programatically you'll have to add LynxActivity to your AndroidManifest.

<activity android:name="com.github.pedrovgs.lynx.LynxActivity"/>

If you have to support applications based on Android 2.X you'll have to add READ_LOG permission to your AndroidManifest. This is not needed for newer Android versions.

<uses-permission android:name="android.permission.READ_LOGS"/>

Add it to your project

Add Lynx dependency to your build.gradle

dependencies{
    compile 'com.github.pedrovgs:lynx:1.1.0'
}

Or add Lynx as a new dependency inside your pom.xml

<dependency>
    <groupId>com.github.pedrovgs</groupId>
    <artifactId>lynx</artifactId>
    <version>1.0.7</version>
    <type>aar</type>
</dependency>

Do you want to contribute?

I'd like to improve this library with your help, there are some new features to implement waiting for you ;)

  • Play/Pause LynxView.
  • Provide a custom UI based on styles.
  • Any cool feature you can imagine!

Libraries used in this project

  • [Renderers] 3
  • [Seismic] 4
  • [Robolectric] 5
  • [JUnit] 6
  • [Mockito] 7

Developed By

Follow me on Twitter Add me to Linkedin

License

Copyright 2015 Pedro Vicente Gómez Sánchez

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Toast rather than crash when sharing giant traces

    Toast rather than crash when sharing giant traces

    Fixes #25.

    @pedrovgs unlike #30, there are several fairly different ways this issue could be addressed. I've included one in this PR, but am more than happy to discuss and make changes if you'd prefer a different solution. (For example, we could build an automatic retry with truncated traces into the shareTraces method.)

    opened by stkent 9
  • Crash

    Crash

    Hello I recently experienced a crash with the app:

    Fatal Exception: java.lang.NullPointerException
           at com.github.pedrovgs.lynx.renderer.TraceRendererBuilder.getPrototypeClass(TraceRendererBuilder.java:53)
           at com.github.pedrovgs.lynx.renderer.TraceRendererBuilder.getPrototypeClass(TraceRendererBuilder.java:37)
           at com.pedrogomez.renderers.RendererBuilder.getItemViewType(RendererBuilder.java:88)
           at com.pedrogomez.renderers.RendererAdapter.getItemViewType(RendererAdapter.java:100)
           at android.widget.AbsListView$RecycleBin.getScrapView(AbsListView.java:8194)
           at android.widget.AbsListView.obtainView(AbsListView.java:2702)
           at android.widget.ListView.makeAndAddView(ListView.java:1811)
           at android.widget.ListView.fillUp(ListView.java:733)
           at android.widget.ListView.layoutChildren(ListView.java:1622)
           at android.widget.AbsListView.onLayout(AbsListView.java:2546)
           at android.view.View.layout(View.java:15664)
           at android.view.ViewGroup.layout(ViewGroup.java:4869)
           at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1055)
           at android.view.View.layout(View.java:15664)
           at android.view.ViewGroup.layout(ViewGroup.java:4869)
           at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
           at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
           at android.view.View.layout(View.java:15664)
           at android.view.ViewGroup.layout(ViewGroup.java:4869)
           at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1677)
           at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1531)
           at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
           at android.view.View.layout(View.java:15664)
           at android.view.ViewGroup.layout(ViewGroup.java:4869)
           at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
           at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
           at android.view.View.layout(View.java:15664)
           at android.view.ViewGroup.layout(ViewGroup.java:4869)
           at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2246)
           at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1968)
           at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1200)
           at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6401)
           at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803)
           at android.view.Choreographer.doCallbacks(Choreographer.java:603)
           at android.view.Choreographer.doFrame(Choreographer.java:573)
           at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789)
           at android.os.Handler.handleCallback(Handler.java:733)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:157)
           at android.app.ActivityThread.main(ActivityThread.java:5335)
           at java.lang.reflect.Method.invokeNative(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:515)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
           at dalvik.system.NativeStart.main(NativeStart.java)
    
    
    bug help wanted 
    opened by ghost 5
  • Add filter by trace level

    Add filter by trace level

    #2

    • TraceLevel: new value "ALL". This value will be used to show all the trace types. It is the default used on LynxConfig
    • LynxView: add a spinner to show all the TraceLevel values. The style is pretty basic, but it can be improved in following commits.
    • Lynx: trace matches now uses TraceLevel too
    • LynxPresenter: new update filter method for TraceLevel
    • LynxConfig: has two new public methods setFilterTraceLevel/getFilterTraceLevel. The reason to create another one and not create a TraceFilter class it's because it will be a breaking change on the public API. I enforced to not pass a null value on the setters for the filter.
    opened by rallat 5
  • ConcurrentModificationException in notifyNewTraces

    ConcurrentModificationException in notifyNewTraces

    Fatal Exception: java.util.ConcurrentModificationException
           at java.util.LinkedList$LinkIterator.next(LinkedList.java:124)
           at java.util.LinkedList.addAll(LinkedList.java:394)
           at java.util.LinkedList.(LinkedList.java)
           at com.github.pedrovgs.lynx.model.Lynx.notifyNewTraces(Lynx.java:156)
           at com.github.pedrovgs.lynx.model.Lynx.access$000(Lynx.java:35)
           at com.github.pedrovgs.lynx.model.Lynx$1.onTraceRead(Lynx.java:79)
           at com.github.pedrovgs.lynx.model.Logcat.notifyListener(Logcat.java:95)
           at com.github.pedrovgs.lynx.model.Logcat.readLogcat(Logcat.java:85)
           at com.github.pedrovgs.lynx.model.Logcat.run(Logcat.java:70)
    
    bug 
    opened by stkent 3
  • Crash when sharing traces

    Crash when sharing traces

    Library version: 1.6 Android version: 6.0.1

    Fatal Exception: java.lang.RuntimeException: Failure from system
           at android.app.Instrumentation.execStartActivity(Instrumentation.java:1547)
           at android.app.Activity.startActivityForResult(Activity.java:4283)
           at android.app.Activity.startActivityForResult(Activity.java:4230)
           at android.app.Activity.startActivity(Activity.java:4567)
           at android.app.Activity.startActivity(Activity.java:4535)
           at com.github.pedrovgs.lynx.LynxView.shareTraces(LynxView.java:185)
           at com.github.pedrovgs.lynx.presenter.LynxPresenter.onShareButtonClicked(LynxPresenter.java:120)
           at com.github.pedrovgs.lynx.LynxView$3.onClick(LynxView.java:321)
           at android.view.View.performClick(View.java:5702)
           at android.view.View$PerformClick.run(View.java:22546)
           at android.os.Handler.handleCallback(Handler.java:739)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:158)
           at android.app.ActivityThread.main(ActivityThread.java:7237)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    Caused by android.os.TransactionTooLargeException: data parcel size 1541076 bytes
           at android.os.BinderProxy.transactNative(Binder.java)
           at android.os.BinderProxy.transact(Binder.java:503)
           at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3130)
           at android.app.Instrumentation.execStartActivity(Instrumentation.java:1540)
           at android.app.Activity.startActivityForResult(Activity.java:4283)
           at android.app.Activity.startActivityForResult(Activity.java:4230)
           at android.app.Activity.startActivity(Activity.java:4567)
           at android.app.Activity.startActivity(Activity.java:4535)
           at com.github.pedrovgs.lynx.LynxView.shareTraces(LynxView.java:185)
           at com.github.pedrovgs.lynx.presenter.LynxPresenter.onShareButtonClicked(LynxPresenter.java:120)
           at com.github.pedrovgs.lynx.LynxView$3.onClick(LynxView.java:321)
           at android.view.View.performClick(View.java:5702)
           at android.view.View$PerformClick.run(View.java:22546)
           at android.os.Handler.handleCallback(Handler.java:739)
           at android.os.Handler.dispatchMessage(Handler.java:95)
           at android.os.Looper.loop(Looper.java:158)
           at android.app.ActivityThread.main(ActivityThread.java:7237)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    
    bug 
    opened by stkent 3
  • Support filter by trace level.

    Support filter by trace level.

    In order to improve the usage of the library could be really cool to support another filter based on the level of the trace: debug, verbose, warning, error...

    help wanted 
    opened by pedrovgs 3
  • Please update project to the latest renderers version

    Please update project to the latest renderers version

    I'm getting a crash in such configuration and multidex on.

    debugCompile 'com.github.pedrovgs:lynx:1.6'
    compile 'com.github.pedrovgs:renderers:3.2.0'
    
    Caused by: java.lang.NoSuchMethodError: No direct method <init>(Landroid/view/LayoutInflater;Lcom/pedrogomez/renderers/RendererBuilder;Lcom/pedrogomez/renderers/AdapteeCollection;)V in class Lcom/pedrogomez/renderers/RendererAdapter; or its super classes (declaration of 'com.pedrogomez.renderers.RendererAdapter' appears in /data/app/com.lalafo.dev-1/base.apk:classes48.dex)
                                                                        at com.github.pedrovgs.lynx.LynxView.initializeRenderers(LynxView.java:279)
                                                                        at com.github.pedrovgs.lynx.LynxView.initializeView(LynxView.java:246)
                                                                        at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:89)
                                                                        at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:82)
                                                                        at java.lang.reflect.Constructor.newInstance0(Native Method) 
                                                                        at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
                                                                        at android.view.LayoutInflater.createView(LayoutInflater.java:645) 
                                                                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) 
                                                                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
                                                                        at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:414) 
                                                                        at android.app.Activity.setContentView(Activity.java:2414) 
                                                                        at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:58) 
                                                                        at android.app.Activity.performCreate(Activity.java:6662) 
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
                                                                        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                        at android.os.Looper.loop(Looper.java:154) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:6077) 
                                                                        at java.lang.reflect.Method.invoke(Native Method) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
    
    opened by ar-g 2
  • Crash caused by StringIndexOutOfBoundsException

    Crash caused by StringIndexOutOfBoundsException

    java.lang.StringIndexOutOfBoundsException: length=0; index=19 at java.lang.String.indexAndLength(String.java:500) at java.lang.String.charAt(String.java:494) at com.github.pedrovgs.lynx.model.Lynx.hasTraceLevelEqualOrHigher(Lynx.java:150) at com.github.pedrovgs.lynx.model.Lynx.containsTraceLevel(Lynx.java:145) at com.github.pedrovgs.lynx.model.Lynx.traceMatchesFilter(Lynx.java:141) at com.github.pedrovgs.lynx.model.Lynx.shouldAddTrace(Lynx.java:134) at com.github.pedrovgs.lynx.model.Lynx.addTraceToTheBuffer(Lynx.java:126) at com.github.pedrovgs.lynx.model.Lynx.access$000(Lynx.java:35) at com.github.pedrovgs.lynx.model.Lynx$1.onTraceRead(Lynx.java:75) at com.github.pedrovgs.lynx.model.Logcat.notifyListener(Logcat.java:95) at com.github.pedrovgs.lynx.model.Logcat.readLogcat(Logcat.java:85) at com.github.pedrovgs.lynx.model.Logcat.run(Logcat.java:70)

    After few seconds from shaking phone in Samsung Galaxy S5 (SM-G900F)(Android 5.0)

    bug 
    opened by sekdariusz 2
  • Add logic to prevent shake detection when on background.

    Add logic to prevent shake detection when on background.

    With these changes, shake detector can be still started from Application class, and disabled when going to background.

    As required in the issue description (https://github.com/pedrovgs/Lynx/issues/14), this feature is configurable, and permanent shake can remain on place. In this case, to prevent launching more than one activity instance, shake detector will be disabled immediately after launching the first one.

    opened by vic-gonzi 2
  • Configure traces filter from the shake detector.

    Configure traces filter from the shake detector.

    I'm using lynx and it's open automatically if I shake the phone. The problem with this usage is that right now it's impossible to configure the filter we are going to use by default.

    We should be able to pass a LynxConfig instance to the ShakeDetector. This config object will be used to start LynxActivity when the user shakes the phone.

    This is the current Lynx usage from any Application class:

    
    public void onCreate(){
        super.onCreate();
        initializeLynx();
    }
    
    private void initializeLynx() {
        if (BuildConfig.DEBUG) {
          LynxShakeDetector lynxShakeDetector = new LynxShakeDetector(this);
          lynxShakeDetector.init();
        }
      }
    
    

    This is the proposed configuration:

    
    public void onCreate(){
        super.onCreate();
        initializeLynx();
    }
    
    private void initializeLynx() {
        if (BuildConfig.DEBUG) {
          LynxShakeDetector lynxShakeDetector = new LynxShakeDetector(this);
            LynxConfig lynxConfig = new LynxConfig();
            lynxConfig.setMaxNumberOfTracesToShow(4000).setFilter("LynxFilter");
          lynxShakeDetector.init(lynxConfig);
        }
      }
    
    
    enhancement 
    opened by pedrovgs 2
  • AppCompat is only need it for testCompile scope

    AppCompat is only need it for testCompile scope

    AppCompat is not need it for debug/release only for testing scope. As a lib project it has to be mindful about the dependencies pulling down for developers. Not all developers want to have this extra dependencies that will increase their apk size and dalvik method cound.

    opened by rallat 2
  • Update to Android X. Update dependencies.

    Update to Android X. Update dependencies.

    Changes in this PR:

    • Update artefacts with AndroidX equivalents;
    • TargetSDK updated to 30;
    • minSdkVersion bumped to 14 (minSdk supported by androidx.appcompat);
    • Update gradle version, add google() repository;
    opened by paolorotolo 1
  • Update renderers library.

    Update renderers library.

    Update the project to use the latest renderers library release where a new feature to update the recycler view with a better performance is implemented.

    enhancement 
    opened by pedrovgs 0
  • Samsung: Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.emeritus.globalivy/com.github.pedrovgs.lynx.LynxActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>

    Samsung: Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.emeritus.globalivy/com.github.pedrovgs.lynx.LynxActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class

    This happens on Samsung devices. I think it happens on rotating to landscape. It is not isolated to this library, but happens on other apps / libraries too.

    Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{org.emeritus.globalivy/com.github.pedrovgs.lynx.LynxActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3168)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by android.view.InflateException: Binary XML file line #18: Error inflating class <unknown>
           at android.view.LayoutInflater.createView(LayoutInflater.java:640)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)
           at android.app.Activity.setContentView(Activity.java:2366)
           at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:65)
           at android.app.Activity.performCreate(Activity.java:6575)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by java.lang.reflect.InvocationTargetException
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)
           at android.app.Activity.setContentView(Activity.java:2366)
           at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:65)
           at android.app.Activity.performCreate(Activity.java:6575)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by android.view.InflateException: Binary XML file line #78: Error inflating class <unknown>
           at android.view.LayoutInflater.createView(LayoutInflater.java:640)
           at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
           at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
           at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:480)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.github.pedrovgs.lynx.LynxView.initializeView(LynxView.java:247)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:88)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:81)
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)
           at android.app.Activity.setContentView(Activity.java:2366)
           at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:65)
           at android.app.Activity.performCreate(Activity.java:6575)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by java.lang.reflect.InvocationTargetException
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
           at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
           at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:480)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.github.pedrovgs.lynx.LynxView.initializeView(LynxView.java:247)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:88)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:81)
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)
           at android.app.Activity.setContentView(Activity.java:2366)
           at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:65)
           at android.app.Activity.performCreate(Activity.java:6575)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    Caused by android.content.res.Resources$NotFoundException: Resource "android:drawable/APKTOOL_DUMMY_0941" (1080941)  is not a Drawable (color or path): TypedValue{t=0x12/d=0x0 a=1 r=0x1080941}
           at android.content.res.Resources.loadDrawableForCookie(Resources.java:3993)
           at android.content.res.Resources.loadDrawable(Resources.java:3905)
           at android.content.res.Resources.getDrawable(Resources.java:1977)
           at android.content.res.Resources.getDrawable(Resources.java:1942)
           at android.widget.AbsListView.initAbsListView(AbsListView.java:1245)
           at android.widget.AbsListView.<init>(AbsListView.java:1150)
           at android.widget.ListView.<init>(ListView.java:166)
           at android.widget.ListView.<init>(ListView.java:162)
           at android.widget.ListView.<init>(ListView.java:158)
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
           at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)
           at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:480)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.github.pedrovgs.lynx.LynxView.initializeView(LynxView.java:247)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:88)
           at com.github.pedrovgs.lynx.LynxView.<init>(LynxView.java:81)
           at java.lang.reflect.Constructor.newInstance(Constructor.java)
           at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
           at android.view.LayoutInflater.createView(LayoutInflater.java:614)
           at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
           at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
           at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)
           at android.app.Activity.setContentView(Activity.java:2366)
           at com.github.pedrovgs.lynx.LynxActivity.onCreate(LynxActivity.java:65)
           at android.app.Activity.performCreate(Activity.java:6575)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3121)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3278)
           at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5184)
           at android.app.ActivityThread.access$1100(ActivityThread.java:211)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1711)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:145)
           at android.app.ActivityThread.main(ActivityThread.java:6918)
           at java.lang.reflect.Method.invoke(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:372)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
    
    bug 
    opened by Emeritus-DarranKelinske 2
  • Log from background app

    Log from background app

    Hi @pedrovgs

    That's great feature for getting log for app, but can i also getting the log messages of app which is running in background.

    suppose the i open Facebook or any google app in my device then after can i filter in log which is display in LynxView, like i want to know that i open google chrome or any specific app by me or not

    if it's possible then please help me.

    Thanks.

    enhancement 
    opened by GauravCreed 1
  • Review instrumentation tests.

    Review instrumentation tests.

    A check Gradle task is causing some instrumentation tests to fail. It seems they're consistent, as I've found the same problem in a Nexus 5X and several emulators.

    @pedrovgs Travis .yml is not executing tests. Is there any reason for it? If not, after fixing this issue I'll update .yml file as well.

    enhancement 
    opened by vic-gonzi 1
Releases(1.1.0)
Owner
Pedro Vicente Gómez Sánchez
"Sometimes it is the people no one imagines anything of who do the things no one can imagine." - Alan Turing
Pedro Vicente Gómez Sánchez
RxJava 2.x extension to provide meaningful Stack Traces

RxJava2Debug A library to make StackTraces involving RxJava2 more meaningful (they will always point to your code!). Rationale If you use RxJava2, you

Mikel 668 Dec 15, 2022
android logcat

android logcat

Ji Sungbin 3 Dec 2, 2022
Under the Hood is a flexible and powerful Android debug view library. It uses a modular template system that can be easily extended to your needs, although coming with many useful elements built-in.

Under the Hood - Android App Debug View Library Under the Hood is a flexible and powerful Android debug view library. It uses a modular template syste

Patrick Favre-Bulle 217 Nov 25, 2022
This app will show grid overlay over whole system which helps you to verify your excellent app design.

GridWichterle for Android This app will show grid overlay over whole system which helps you to verify your excellent app design. Download: What is the

Inmite s.r.o. 407 Jan 9, 2023
🌼APM, (Application Performance Management) tool for kotlin/java application.

??APM, (Application Performance Management) tool for kotlin/java application.

Espresso 4 Mar 8, 2022
A view that makes it easy to debug response data.(一个可以方便调试响应数据的视图。)

JSONRecyclerView 该控件可以方便调试响应数据,如下图所示: 控件的样式参考以下这个网站: JSON在线解析解析及格式化验证 项目的GitHub:JSONRecyclerView 项目Demo的GitHub:JSONRecyclerViewDemo 概述 控件是以RecyclerVie

TanJiaJun 28 Oct 7, 2022
Goreinu allows to copy application files on sdcard.

Goreinu Goreinu allows to copy application files on sdcard.(/data/data/package_name/... -> /sdcard/Goreinu/package_name). Getting started In your buil

Shinnosuke Kugimiya 32 Dec 11, 2021
A surgical debugging tool to uncover the layers under your app.

Scalpel DEPRECATED! Android Studio 4.0's layout inspector now includes a live-updating 3D view. Use it! A surgical debugging tool to uncover the layer

Jake Wharton 2.8k Jan 9, 2023
A library for debugging android databases and shared preferences - Make Debugging Great Again

Android Debug Database Android Debug Database is a powerful library for debugging databases and shared preferences in Android applications Android Deb

AMIT SHEKHAR 8.1k Dec 29, 2022
Android library to record the network calls through the interceptor mechanism of the http clients.

Android Snooper Introduction Android Snooper is a library which helps in debugging issues while running the applications on android devices. One of th

Prateek 151 Nov 25, 2022
traffic debugging library for android

TrafficMonitor About Display traffic per Activity.Observing traffic is used by TrafficStats API. OkHttp Interceptor observer is implementing. Demo Bai

Tetsuya Masuda 17 Feb 4, 2022
Cordova plugin for Android Serial USB communication (easily connect an Arduino board to an Android device).

PR-DC cordova-plugin-serialusb Cordova plugin for Android Serial USB communication. This plugin makes a connection to the external board trivial, for

PR-DC 3 May 8, 2022
Stetho is a debug bridge for Android applications, enabling the powerful Chrome Developer Tools and much more.

Stetho Stetho is a sophisticated debug bridge for Android applications. When enabled, developers have access to the Chrome Developer Tools feature nat

Facebook 12.6k Jan 7, 2023
🔪Swiss-army knife for Android testing and development 🔪 ⛺

ADB Enhanced ADB-Enhanced is a Swiss-army knife for Android testing and development. A command-line interface to trigger various scenarios like screen

Ashish Bhatia 938 Dec 20, 2022
A Read-Eval-Print-Loop server for Android and SQLite

Android DebugPort Android DebugPort is a drop-in utility which allows you to write and execute code within your app's context, at runtime, and from th

Jason Feinstein 148 Nov 14, 2022
Easy android exception tracer and handler.

Introduction Lup is a small android library that can help you to tracking bug that causes application stopped working (force close). Whiting this libr

icodeu 4 Sep 29, 2022
Sources for the LiveBoot app for rooted Android devices

This is the sauce for the LiveBoot app. License Copyright © 2011-2020 Jorrit Chainfire Jongma This code is released under the GPLv3. LICENSE, COPYING.

Chainfire 131 Jan 9, 2023
A local ADB shell for Android!

LADB A local ADB shell for Android! How does it work? LADB bundles an ADB server within the app libraries. Normally, this server cannot connect to the

Tyler 1.1k Jan 2, 2023