Giter Site home page Giter Site logo

bugtags-android's Introduction

Android Gems

Bugtags Android SDK

Download ###中文文档请移步 README_CN ###QQ tribe for help: 210286347

[Bugtags] for Android, reports bugs and their diagnosis information in one step, captures crashes automatically. Improve your apps anywhere, anytime.

Create a free account and invite your team to improve your apps.

Download demo app here: DEMO.apk

If you are using Eclipse for Android development, visit [SDK for Eclipse] to download SDK.

Bugtags also support iOS !

We are going to support English language in September.

Features

  1. Take snapshot of bug, add tags to describe the bug.
  2. Automatically collect device and app context data following reporting bugs.
  3. Automatically capture crashes.
  4. Bug lifecycle management.

Usage

How to use

Install using gradle

Step 1:

  • Setup buildscript dependencies in Top-level build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'

        classpath 'com.bugtags.library:bugtags-gradle:latest.integration'
    }
}
allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}
  • Add plugin and dependency in your module's build.gradle file:
    android {
        compileSdkVersion ...

        defaultConfig {
            ndk {
                // setup so arch
                abiFilters 'armeabi'// 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64'
            }
        }
    }

    //applu Bugtags plugin
    apply plugin: 'com.bugtags.library.plugin'

    //Bugtags config
    bugtags {
        //upload mapping file
        appKey "APP_KEY"  
        appSecret "APP_SECRET"   
        mappingUploadEnabled true

        trackingNetworkEnabled true
    }

    dependencies {
        ...
        compile 'com.bugtags.library:bugtags-lib:latest.integration'
    }

Step 2:

  • Add three callbacks in your base Activity class:
    package your.package.name;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.MotionEvent;
    import com.bugtags.library.Bugtags;

    public class BaseActivity extends Activity{
        @Override
        protected void onResume() {
            super.onResume();

            Bugtags.onResume(this);
        }

        @Override
        protected void onPause() {
            super.onPause();

            Bugtags.onPause(this);
        }

        @Override
        public boolean dispatchTouchEvent(MotionEvent event) {
            Bugtags.onDispatchTouchEvent(this, event);

            return super.dispatchTouchEvent(event);
        }
    }
    ```

## Step 3:
* Create subclass of Application,initialize Bugtags in onCreate() method:

```java
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //initialize here
        Bugtags.start("YOUR APPKEY", this, Bugtags.BTGInvocationEventBubble);
    }
}
  • Modify AndroidManifest.xml,use MyApplication:
<application
    android:name=".MyApplication"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    ....
</application>

Step 4:ProGuard

    # ProGuard configurations for Bugtags
      -keepattributes LineNumberTable,SourceFile

      -keep class com.bugtags.library.** {*;}
      -dontwarn com.bugtags.library.**
      -keep class io.bugtags.** {*;}
      -dontwarn io.bugtags.**
      -dontwarn org.apache.http.**
      -dontwarn android.net.http.AndroidHttpClient

    # End Bugtags

For more information about Android Studio and gradle, please visit: [Android Developer Site].

There you go!

Explore

  1. Invoke event:
  • BTGInvocationEventBubble: Show floating circle in app.
  • BTGInvocationEventShake: Show floating circle by shake.
  • BTGInvocationEventNone: Show no floating circle, capture crash bug only(if allow), this is recommended to be used in release build.
  1. Send caught exception:
  • Bugtags.sendException(Throwable ex);
  1. Send feedback:
  • Bugtags.sendFeedback(String msg);

Canary Channel

We are offering a bleeding edge builds on canary chanel, you can enjoy the new features in the first place!

Canry: https://en.wikipedia.org/wiki/Canary

  • Add repository in your project's build.gradle
buildscript {
    repositories {
        mavenCentral()
        jcenter()
        maven{
            url "https://dl.bintray.com/bugtags/maven"//added
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.bugtags.library-canary:bugtags-gradle:latest.integration'//modify
    }
}
allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven{
            url "https://dl.bintray.com/bugtags/maven"//added
        }
    }
}
  • Change your dependency in your module's build.gradle
apply plugin: 'com.bugtags.library.plugin'

dependencies {
      compile 'com.bugtags.library-canary:bugtags-lib:latest.integration'//modify
}

Change log

see in releases

License

This demo is BSD-licensed.

bugtags-android's People

Contributors

kevinho avatar liaohuqiu avatar ravidsrk avatar xinshan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bugtags-android's Issues

Could not resolve com.bugtags.library:bugtags-lib:latest.integration

Unable to resolve dependency for ':RunSoft.SmartCitySys@rsspcyDebug/compileClasspath': Could not resolve com.bugtags.library:bugtags-lib:latest.integration.

Could not resolve com.bugtags.library:bugtags-lib:latest.integration.
Required by:
project :RunSoft.SmartCitySys

Could not resolve com.bugtags.library:bugtags-lib:latest.integration.
> Failed to list versions for com.bugtags.library:bugtags-lib.
> Unable to load Maven meta-data from https://jcenter.bintray.com/com/bugtags/library/bugtags-lib/maven-metadata.xml.
> Could not HEAD 'https://jcenter.bintray.com/com/bugtags/library/bugtags-lib/maven-metadata.xml'.
> sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
> unable to find valid certification path to requested target

1.2.7 导致百度地图初始化失败

刚从这个坑里出来。。。

出现问题时的配置:

compile 'com.bugtags.library:bugtags-lib:1.2.7' 

如下的配置也出现问题:

compile 'com.bugtags.library:bugtags-lib:latest.integration' 

如下配置正常:

compile 'com.bugtags.library:bugtags-lib:1.2.6'

根 gradle 脚本配置都是:

classpath 'com.bugtags.library:bugtags-gradle:latest.integration'

有个莫名其妙的NullPointerException问题

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String io.bugtags.agent.AgentConfiguration.getTrackingNetworkURLFilter()' on a null object reference
     at io.bugtags.agent.network.TransactionQueue.enqueue(TransactionQueue.java:69)
     at io.bugtags.agent.instrumentation.TransactionStateUtil.sendData(TransactionStateUtil.java:250)
     at io.bugtags.agent.instrumentation.okhttp3.OkHttp3TransactionStateUtil.addTransactionAndErrorData(OkHttp3TransactionStateUtil.java:149)
     at io.bugtags.agent.instrumentation.okhttp3.OkHttp3TransactionStateUtil.inspectAndInstrumentResponse(OkHttp3TransactionStateUtil.java:75)
     at io.bugtags.agent.instrumentation.okhttp3.CallExtension.checkResponse(CallExtension.java:72)
     at io.bugtags.agent.instrumentation.okhttp3.CallExtension.execute(CallExtension.java:49)
     at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
     at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$RequestArbiter.request(RxJavaCallAdapterFactory.java:171)
     at rx.internal.operators.OperatorSubscribeOn$1$1$1.request(OperatorSubscribeOn.java:80)
     at rx.Subscriber.setProducer(Subscriber.java:211)
     at rx.internal.operators.OperatorSubscribeOn$1$1.setProducer(OperatorSubscribeOn.java:76)
     at rx.Subscriber.setProducer(Subscriber.java:205)
     at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:152)
     at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:138)
     at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
     at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
     at rx.Observable.unsafeSubscribe(Observable.java:10200)
     at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
     at rx.internal.schedulers.CachedThreadScheduler$EventLoopWorker$1.call(CachedThreadScheduler.java:228)
     at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
     at java.lang.Thread.run(Thread.java:761)
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String io.bugtags.agent.AgentConfiguration.getTrackingNetworkURLFilter()' on a null object reference
    at io.bugtags.agent.network.TransactionQueue.enqueue(TransactionQueue.java:69)
    at io.bugtags.agent.instrumentation.TransactionStateUtil.sendData(TransactionStateUtil.java:250)
    at io.bugtags.agent.instrumentation.httpurl.HttpsURLConnectionExtension.addTransactionAndErrorData(HttpsURLConnectionExtension.java:502)
    at io.bugtags.agent.instrumentation.httpurl.HttpsURLConnectionExtension.disconnect(HttpsURLConnectionExtension.java:69)
    at cn.jpush.android.util.s.a(Unknown Source)
    at cn.jpush.android.util.aj.a(Unknown Source)
    at cn.jpush.android.api.d.run(Unknown Source)

IssueImageUpload Error: com.bugtags.library.obfuscated.am: javax.net.ssl.SSLHandshakeException:

bugtags 1.3.3, 异常详情:

IssueImageUpload Error:
com.bugtags.library.obfuscated.am: javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: null
at com.bugtags.library.obfuscated.at.e(BasicNetwork.java:96)
at com.bugtags.library.obfuscated.an.run(NetworkDispatcher.java:99)
Caused by: javax.net.ssl.SSLHandshakeException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: null
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:409)
at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
at com.android.okhttp.Connection.connect(Connection.java:107)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:254)
at com.bugtags.library.obfuscated.av.b(HurlStack.java:215)
at com.bugtags.library.obfuscated.av.a(HurlStack.java:202)
at com.bugtags.library.obfuscated.av.a(HurlStack.java:101)
at com.bugtags.library.obfuscated.at.e(BasicNetwork.java:56)
... 1 more
Caused by: java.security.cert.CertificateException: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: null
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:308)
at com.android.org.conscrypt.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:202)
at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:611)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405)
... 14 more
Caused by: com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: null
at com.android.org.bouncycastle.jce.provider.RFC3280CertPathUtilities.processCertA(RFC3280CertPathUtilities.java:1488)
at com.android.org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:305)
at java.security.cert.CertPathValidator.validate(CertPathValidator.java:190)
at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:295)
... 18 more
Caused by: java.security.cert.CertificateExpiredException
at com.android.org.conscrypt.OpenSSLX509Certificate.checkValidity(OpenSSLX509Certificate.java:220)
at com.android.org.bouncycastle.jce.provider.RFC3280CertPathUtilities.processCertA(RFC3280CertPathUtilities.java:1483)
... 21 more

对于这种需求“DEBUG包含Bugtags,RELEASE不包含”,有什么建议么

我的方案:release下,引用我自己建的bugtags。这样能够保证代码不用改动。

    debugCompile 'com.bugtags.library:bugtags-lib:latest.integration'
    releaseCompile project(':mockbugtags')

但是启动release版本,碰到这种问题:

java.lang.NoSuchMethodError: No static method execute(Lorg/apache/http/client/HttpClient;Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/HttpResponse; in class Lcom/bugtags/library/agent/instrumentation/HttpInstrumentation; or its super classes (declaration of 'com.bugtags.library.agent.instrumentation.HttpInstrumentation' appears in /data/app/com.test-1/base.apk)
                                                 at com.iflytek.thridparty.bc.run(Unknown Source)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.