Official Mixpanel Android SDK

Overview

Mixpanel Android Library

Latest Version Build Status

March 25, 2021 - v5.8.8

Table of Contents

Quick Start Guide

Check out our official documentation for more in depth information on installing and using Mixpanel on Android.

Installation

Dependencies in app/build.gradle

Add the following lines to the dependencies section in app/build.gradle

implementation "com.mixpanel.android:mixpanel-android:5.+"
implementation "com.google.firebase:firebase-messaging:17.3.4" // optional, if push notifications are used
implementation "com.android.installreferrer:installreferrer:1.1" // optional, if you want to know how users installed your app

Permissions in app/src/main/AndroidManifest.xml

<!-- This permission is required to allow the application to send events and properties to Mixpanel -->
<uses-permission android:name="android.permission.INTERNET" />

<!-- This permission is optional but recommended so we can be smart about when to send data  -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- This permission is optional but recommended so events will contain information about bluetooth state -->
<uses-permission android:name="android.permission.BLUETOOTH" />

Integration

Initialization

Initialize Mixpanel in your main activity app/src/main/java/com/mixpanel/example/myapplication/MainActivity.java. Usually this should be done in onCreate.

String projectToken = YOUR_PROJECT_TOKEN; // e.g.: "1ef7e30d2a58d27f4b90c42e31d6d7ad" 
MixpanelAPI mixpanel = MixpanelAPI.getInstance(this, projectToken);

Remember to replace YOUR_PROJECT_TOKEN with the token provided to you on mixpanel.com.

Tracking

After installing the library into your Android app, Mixpanel will automatically collect common mobile events. You can enable/disable automatic collection through your project settings.

With the mixpanel object created in the last step a call to track is all you need to send additional events to Mixpanel.

mixpanel.track("Event name no props")

JSONObject props = new JSONObject();
props.put("Prop name", "Prop value");
props.put("Prop 2", "Value 2");
mixpanel.track("Event name", props);

I want to know more!

No worries, here are some links that you will find useful:

Have any questions? Reach out to [email protected] to speak to someone smart, quickly.

Want to Contribute?

The Mixpanel library for Android is an open source project, and we'd love to see your contributions! We'd also love for you to come and work with us! Check out our opening positions for details.

Changelog

See wiki page.

License

See LICENSE File for details. The Base64Coder,
ConfigurationChecker, and StackBlurManager classes, and the entirety of the
 com.mixpanel.android.java_websocket package used by this
software have been licensed from non-Mixpanel sources and modified
for use in the library. Please see the relevant source files, and the
LICENSE file in the com.mixpanel.android.java_websocket package for details.

The StackBlurManager class uses an algorithm by Mario Klingemann <[email protected]>
You can learn more about the algorithm at
http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html.
Comments
  • Analytics Worker Fatal Exception: Strange Thread Crash

    Analytics Worker Fatal Exception: Strange Thread Crash

    We're using 4.0.0 and seeing some very strange crashes in various places on certain devices, but not others.

    The most reproducible crashing device is the incredibly slow Sony Xperia U running Android 4.0.4.

    If we ever call MixpanelAPI.getInstance(context, MIXPANEL_TOKEN) then our app crashes in different places, in our network request callbacks with this:

    ... FATAL EXCEPTION: com.mixpanel.android.AnalyticsWorker android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. ...

    An example of the rest of a stack trace is at the bottom.

    This is without ever tracking any events. As soon as we stop grabbing an instance of MixpanelAPI we don't see any crashes.

    ... E/AndroidRuntime(14649): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4043) E/AndroidRuntime(14649): at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:722) E/AndroidRuntime(14649): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:771) E/AndroidRuntime(14649): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4112) E/AndroidRuntime(14649): at android.view.View.invalidate(View.java:8639) E/AndroidRuntime(14649): at android.view.View.invalidate(View.java:8590) E/AndroidRuntime(14649): at android.widget.TextView.updateTextColors(TextView.java:2901) E/AndroidRuntime(14649): at android.widget.TextView.drawableStateChanged(TextView.java:2911) E/AndroidRuntime(14649): at android.view.View.refreshDrawableState(View.java:11695) E/AndroidRuntime(14649): at android.view.View.setEnabled(View.java:4711) E/AndroidRuntime(14649): at android.widget.TextView.setEnabled(TextView.java:1230) [removed... our app code] E/AndroidRuntime(14649): at android.os.AsyncTask.finish(AsyncTask.java:602) E/AndroidRuntime(14649): at android.os.AsyncTask.access$600(AsyncTask.java:156) E/AndroidRuntime(14649): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) E/AndroidRuntime(14649): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(14649): at android.os.Looper.loop(Looper.java:137) E/AndroidRuntime(14649): at android.os.HandlerThread.run(HandlerThread.java:60) ...

    bug 
    opened by jsonfry 28
  • java.security.NoSuchAlgorithmException: MessageDigest MD5 implementation not found

    java.security.NoSuchAlgorithmException: MessageDigest MD5 implementation not found

    Hey guys, I'm seeing this exception in my bug report system, mostly on 4.1.X systems. Any idea when will this be fixed ?

    0 java.lang.AssertionError: java.security.NoSuchAlgorithmException: MessageDigest MD5 implementation not found 1 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.X509_NAME_hash(NativeCrypto.java:188) 2 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.X509_NAME_hash_old(NativeCrypto.java:181) 3 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.hash(TrustedCertificateStore.java:417) 4 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.findCert(TrustedCertificateStore.java:377) 5 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.isTrustAnchor(TrustedCertificateStore.java:326) 6 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.findTrustAnchorBySubjectAndPublicKey(TrustManagerImpl.java:307) 7 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.cleanupCertChainAndFindTrustAnchors(TrustManagerImpl.java:237) 8 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:184) 9 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:163) 10 at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:597) 11 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method) 12 at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395) 13 at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210) 14 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478) 15 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 16 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 17 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 18 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 19 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 20 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 21 at com.mixpanel.android.mpmetrics.ServerMessage.performRequest(ServerMessage.java:152) 22 at com.mixpanel.android.mpmetrics.ServerMessage.get(ServerMessage.java:106) 23 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.getSurveyFromServer(AnalyticsMessages.java:422) 24 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.runSurveyCheck(AnalyticsMessages.java:367) 25 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.handleMessage(AnalyticsMessages.java:301) 26 at android.os.Handler.dispatchMessage(Handler.java:99) 27 at android.os.Looper.loop(Looper.java:137) 28 at android.os.HandlerThread.run(HandlerThread.java:60) 29 Caused by: java.security.NoSuchAlgorithmException: MessageDigest MD5 implementation not found 30 at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177) 31 at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151) 32 at java.security.MessageDigest.getInstance(MessageDigest.java:91) 33 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.X509_NAME_hash(NativeCrypto.java:185) 34 ... 27 more 35 java.security.NoSuchAlgorithmException: MessageDigest MD5 implementation not found 36 at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177) 37 at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151) 38 at java.security.MessageDigest.getInstance(MessageDigest.java:91) 39 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.X509_NAME_hash(NativeCrypto.java:185) 40 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.X509_NAME_hash_old(NativeCrypto.java:181) 41 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.hash(TrustedCertificateStore.java:417) 42 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.findCert(TrustedCertificateStore.java:377) 43 at org.apache.harmony.xnet.provider.jsse.TrustedCertificateStore.isTrustAnchor(TrustedCertificateStore.java:326) 44 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.findTrustAnchorBySubjectAndPublicKey(TrustManagerImpl.java:307) 45 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.cleanupCertChainAndFindTrustAnchors(TrustManagerImpl.java:237) 46 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:184) 47 at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:163) 48 at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:597) 49 at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method) 50 at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395) 51 at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:210) 52 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478) 53 at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 54 at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289) 55 at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239) 56 at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 57 at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 58 at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271) 59 at com.mixpanel.android.mpmetrics.ServerMessage.performRequest(ServerMessage.java:152) 60 at com.mixpanel.android.mpmetrics.ServerMessage.get(ServerMessage.java:106) 61 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.getSurveyFromServer(AnalyticsMessages.java:422) 62 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.runSurveyCheck(AnalyticsMessages.java:367) 63 at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.handleMessage(AnalyticsMessages.java:301) 64 at android.os.Handler.dispatchMessage(Handler.java:99) 65 at android.os.Looper.loop(Looper.java:137) 66 at android.os.HandlerThread.run(HandlerThread.java:60)

    Thanks , Shimi

    opened by shimitapiro 25
  • PersistentIdentity : OutOfMemoryError

    PersistentIdentity : OutOfMemoryError

    Hey!

    I noticed recently a new crash in my crash report tool. I didn't had a chance to reproduce it out of the wild.

    Here is the stack trace:

    java.lang.OutOfMemoryError at java.lang.String.(String.java:422) at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642) at java.lang.StringBuilder.toString(StringBuilder.java:663) at org.json.JSONStringer.toString(JSONStringer.java:430) at org.json.JSONArray.toString(JSONArray.java:575) at com.mixpanel.android.mpmetrics.PersistentIdentity.writeIdentities(PersistentIdentity.java:380) at com.mixpanel.android.mpmetrics.PersistentIdentity.storeWaitingPeopleRecord(PersistentIdentity.java:142) at com.mixpanel.android.mpmetrics.MixpanelAPI.recordPeopleMessage(MixpanelAPI.java:1718) at com.mixpanel.android.mpmetrics.MixpanelAPI.access$800(MixpanelAPI.java:112) at com.mixpanel.android.mpmetrics.MixpanelAPI$PeopleImpl.set(MixpanelAPI.java:1130) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1030)

    bug 
    opened by fred8 24
  • UI Lag on Lollipop

    UI Lag on Lollipop

    While testing our app on Lollipop we noticed a huge decrease in performance on Lollipop devices. After much debugging we narrowed down the issue to MixPanel. After removing the MixPanel init everything is nice and smooth: MixpanelAPI.getInstance(this, MIXPANEL_TOKEN);

    This is fairly easy to reproduce by adding a height animator on any view. The more complex the view the more janky the result, but even a view with a single color will lag enough to be noticed: ValueAnimator animator = ValueAnimator.ofInt(0, 2000); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.height = (Integer) valueAnimator.getAnimatedValue(); view.setLayoutParams(layoutParams); } }); animator.setDuration(3000); animator.start();

    We love MixPanel, but until we have a solution for this lag will most likely have to remove it. Please let me know how I can help you resolve it.

    bug 
    opened by bradgrimm 24
  • BLUETOOTH permission is listed as optional in docs but seems to be required

    BLUETOOTH permission is listed as optional in docs but seems to be required

    The Android setup docs under Step 2 - Add permissions to your AndroidManifest.xml: list the BLUETOOTH permission as optional but I am seeing a consistent crash for at least a Samsung SM-925T. I have not tested enough to determine if this is device specific but either way it should not happen. It causes our app to go into a crash/restart cycle of sometimes more than 10 times.

    02-02 10:09:11.688 13384-13405/? E/BluetoothAdapter: Application does not have bluetooth permission, registering is failed
    02-02 10:09:11.688 13384-13405/? E/BluetoothAdapter: java.lang.SecurityException: Need BLUETOOTH permission: Neither user 10348 nor current process has android.permission.BLUETOOTH.
                                                             at android.os.Parcel.readException(Parcel.java:1620)
                                                             at android.os.Parcel.readException(Parcel.java:1573)
                                                             at android.bluetooth.IBluetoothManager$Stub$Proxy.registerStateChangeCallback(IBluetoothManager.java:350)
                                                             at android.bluetooth.BluetoothAdapter.<init>(BluetoothAdapter.java:594)
                                                             at android.bluetooth.BluetoothAdapter.getDefaultAdapter(BluetoothAdapter.java:576)
                                                             at com.mixpanel.android.mpmetrics.SystemInformation.isBluetoothEnabled(SystemInformation.java:141)
                                                             at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.getDefaultEventProperties(AnalyticsMessages.java:559)
                                                             at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.prepareEventObject(AnalyticsMessages.java:573)
                                                             at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.handleMessage(AnalyticsMessages.java:251)
                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                             at android.os.Looper.loop(Looper.java:158)
                                                             at android.os.HandlerThread.run(HandlerThread.java:61)
    
    opened by agramian 22
  • Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId

    Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId

        implementation 'com.mixpanel.android:mixpanel-android:5.9.1'
    
        // Firebase
        implementation platform('com.google.firebase:firebase-bom:28.0.1')
    
        implementation 'com.google.firebase:firebase-messaging'
        implementation "com.google.firebase:firebase-config"
        implementation 'com.google.firebase:firebase-core'
        implementation 'com.google.firebase:firebase-dynamic-links'
        implementation 'com.google.firebase:firebase-auth-ktx'
        implementation 'com.google.firebase:firebase-analytics'
        implementation 'com.google.firebase:firebase-database-ktx'
        implementation 'com.google.firebase:firebase-firestore-ktx'
        implementation 'com.google.firebase:firebase-crashlytics'
    

    Crash on startapp

    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId;
            at com.mixpanel.android.mpmetrics.MixpanelFCMMessagingService.init(MixpanelFCMMessagingService.java:84)
            at com.mixpanel.android.mpmetrics.MixpanelAPI.getInstance(MixpanelAPI.java:655)
            at com.mixpanel.android.mpmetrics.MixpanelAPI.getInstance(MixpanelAPI.java:536)
            at myapp.App.onCreate(App.kt:52)
    

    myapp.App.onCreate(App.kt:52):

    MixpanelAPI.getInstance(this, BuildConfig.MIXPANEL_TOKEN)
    

    Firebase: 28.0.1 don't contain FirebaseInstanceId at all. It was deprecated a few versions ago. You should use: FirebaseMessaging.getToken() for messaging or FirebaseInstallations for app instance identifiers. More info: https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId

    opened by mtrakal 21
  • Error with InAppFragment

    Error with InAppFragment

    Fatal Exception: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1323) at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1341) at android.app.BackStackRecord.commitInternal(BackStackRecord.java:597) at android.app.BackStackRecord.commit(BackStackRecord.java:575) at com.mixpanel.android.mpmetrics.InAppFragment.cleanUp(InAppFragment.java:224) at com.mixpanel.android.mpmetrics.InAppFragment.onSaveInstanceState(InAppFragment.java:206) at android.app.Fragment.performSaveInstanceState(Fragment.java:1845) at android.app.FragmentManagerImpl.saveFragmentBasicState(FragmentManager.java:1596) at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1653) at android.app.Activity.onSaveInstanceState(Activity.java:1297) at android.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:522) at android.app.Activity.performSaveInstanceState(Activity.java:1245) at android.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1229) at android.app.ActivityThread.performStopActivityInner(ActivityThread.java:3527) at android.app.ActivityThread.handleStopActivity(ActivityThread.java:3586) at android.app.ActivityThread.access$1200(ActivityThread.java:171) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1336) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:146) at android.app.ActivityThread.main(ActivityThread.java:5679) 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:1291) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107) at dalvik.system.NativeStart.main(NativeStart.java)

    bug 
    opened by fabiocarballo 18
  • Memory leak

    Memory leak

    Hi,

    After some investigation on my app, I have detected an huge memory leak coming from Mixpanel (see attached pictures). For the moment I have no idea where it comes from but it appear as soon as I call : MixpanelAPI.getInstance(my_context, MIXPANEL_TOKEN);

    The android studio allocation tracker confirms that it comes from the Mixpanel package.

    Following my investigation :

    • If I call the flush method, the leak is stopped when the app is in the bakground.
    • If I don't call the flush method, the leak is still present when the app is in the bakground.
    • If I call the getInstance(...) method with the wrong Token, I get no leaks.
    • I have tried with version 4.5.1 and the issue is the same (my current version is 4.6.4)
    • I have tried to move the Mixpanel initialization in another activity : same issue
    • Same issue on multiple android version (lollipop, kitkat ...).

    Any idea ?

    Android studio : without_mixpanel without_mixpanel with_mixpanel with_mixpanel

    bug high-priority 
    opened by pguilbot 18
  • joinExperimentIfAvailable / addOnMixpanelUpdatesReceivedListener doesn't guarantee that the tweaks are up to date

    joinExperimentIfAvailable / addOnMixpanelUpdatesReceivedListener doesn't guarantee that the tweaks are up to date

    As said in the title. When we join an experiment and receive the mixpanel update callback; sometimes the tweaks variable are not up to date. Would be great to have a fix for it

    opened by fred8 17
  • android.os.BadParcelableException: Unable to start activity ComponentInfo{com.mixpanel.android.surveys.SurveyActivity}

    android.os.BadParcelableException: Unable to start activity ComponentInfo{com.mixpanel.android.surveys.SurveyActivity}

    Hi,

    Mixpanel SDK: 'com.mixpanel.android:mixpanel-android:4.5.3'

    Our app crashes with the following stack traces.

    
    java.lang.RuntimeException: Unable to start activity ComponentInfo{<packagename>/com.mixpanel.android.surveys.SurveyActivity}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.mixpanel.android.mpmetrics.Survey
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2661)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
    at android.app.ActivityThread.access$900(ActivityThread.java:172)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:5835)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
    Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class com.mixpanel.android.mpmetrics.Survey
    at android.os.Parcel.readParcelableCreator(Parcel.java:2298)
    at android.os.Parcel.readParcelable(Parcel.java:2239)
    at android.os.Parcel.readValue(Parcel.java:2146)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.BaseBundle.getInt(BaseBundle.java:781)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$DisplayState$SurveyState.<init>(UpdateDisplayState.java:184)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$DisplayState$SurveyState.<init>(UpdateDisplayState.java:107)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$DisplayState$SurveyState$1.a(UpdateDisplayState.java:116)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$DisplayState$SurveyState$1.createFromParcel(UpdateDisplayState.java:111)
    at android.os.Parcel.readParcelable(Parcel.java:2246)
    at android.os.Parcel.readValue(Parcel.java:2146)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.BaseBundle.getString(BaseBundle.java:918)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState.<init>(UpdateDisplayState.java:424)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState.<init>(UpdateDisplayState.java:25)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$1.a(UpdateDisplayState.java:380)
    at com.mixpanel.android.mpmetrics.UpdateDisplayState$1.createFromParcel(UpdateDisplayState.java:375)
    at android.os.Parcel.readParcelable(Parcel.java:2246)
    at android.os.Parcel.readValue(Parcel.java:2146)
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479)
    at android.os.BaseBundle.unparcel(BaseBundle.java:221)
    at android.os.Bundle.getParcelable(Bundle.java:804)
    at android.app.Activity.onCreate(Activity.java:981)
    at com.mixpanel.android.surveys.SurveyActivity.onCreate(SurveyActivity.java:65)
    at android.app.Activity.performCreate(Activity.java:6221)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2614)
    ... 10 more
    
    bug 
    opened by Digisha 17
  • Can't write track_message to server

    Can't write track_message to server

    Hi, I tried to implement library version 4.6.x on my Android app. First call to MixpanelAPI.track is working but the next calls are giving me the next error:

    E/MixpanelAPI.ViewCrawler﹕ Can't write track_message to server
        com.mixpanel.android.viewcrawler.EditorConnection$EditorConnectionException
                at com.mixpanel.android.viewcrawler.EditorConnection$WebSocketOutputStream.write(EditorConnection.java:147)
                at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:185)
                at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:85)
                at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:171)
                at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
                at android.util.JsonWriter.flush(JsonWriter.java:384)
                at com.mixpanel.android.viewcrawler.ViewCrawler$ViewCrawlerHandler.sendReportTrackToEditor(ViewCrawler.java:646)
                at com.mixpanel.android.viewcrawler.ViewCrawler$ViewCrawlerHandler.handleMessage(ViewCrawler.java:306)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.os.HandlerThread.run(HandlerThread.java:61)
    E/MixpanelAPI.ViewCrawler﹕ Can't close writer.
        com.mixpanel.android.viewcrawler.EditorConnection$EditorConnectionException
                at com.mixpanel.android.viewcrawler.EditorConnection$WebSocketOutputStream.write(EditorConnection.java:147)
                at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:185)
                at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:85)
                at java.io.FilterOutputStream.close(FilterOutputStream.java:61)
                at java.io.BufferedOutputStream.close(BufferedOutputStream.java:152)
                at java.io.OutputStreamWriter.close(OutputStreamWriter.java:141)
                at android.util.JsonWriter.close(JsonWriter.java:393)
                at com.mixpanel.android.viewcrawler.ViewCrawler$ViewCrawlerHandler.sendReportTrackToEditor(ViewCrawler.java:651)
                at com.mixpanel.android.viewcrawler.ViewCrawler$ViewCrawlerHandler.handleMessage(ViewCrawler.java:306)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:135)
                at android.os.HandlerThread.run(HandlerThread.java:61)
    

    The version 4.5.3 is working like a charm. No errors.

    opened by pepos 16
  • Could not resolve com.mixpanel.android:mixpanel-android

    Could not resolve com.mixpanel.android:mixpanel-android

    Execution failed for task ':app:mergeDebugAssets'.
    > Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
       > Could not resolve com.mixpanel.android:mixpanel-android:6.+.
         Required by:
             project :app
          > Failed to list versions for com.mixpanel.android:mixpanel-android.
             > Unable to load Maven meta-data from https://jcenter.bintray.com/com/mixpanel/android/mixpanel-android/maven-metadata.xml.
                > Could not HEAD 'https://jcenter.bintray.com/com/mixpanel/android/mixpanel-android/maven-metadata.xml'.
                   > Read timed out
    

    Could not HEAD 'https://jcenter.bintray.com/com/mixpanel/android/mixpanel-android/maven-metadata.xml'.

    opened by dhaval23996 2
  • People.set throwing UnsupportedOperationException

    People.set throwing UnsupportedOperationException

    An exception is thrown when calling set on people SDK version: 6.5.2

    Non-fatal Exception: java.lang.UnsupportedOperationException
           at java.util.Collections$UnmodifiableMap.put(Collections.java:1504)
           at org.json.JSONObject.put(JSONObject.java:1056)
           at com.mixpanel.android.mpmetrics.MixpanelAPI$PeopleImpl.set(MixpanelAPI.java:1888)
           at com.mixpanel.android.mpmetrics.MixpanelAPI$PeopleImpl.setMap(MixpanelAPI.java:1875)
    

    In the mean time I tried to bypass by using unset on all properties, then setOnceMap

    opened by badoualy 5
  • Hardcoded tracking to project with token 85053bf24bba75239b16a601d9387e17

    Hardcoded tracking to project with token 85053bf24bba75239b16a601d9387e17

    The Android SDK seems to be tracking the usage (first integration on a device) of the Mixpanel SDK in a project with the token 85053bf24bba75239b16a601d9387e17, hardcoded at: ../mixpanel-android-7.0.0-sources.jar!/com/mixpanel/android/mpmetrics/MixpanelAPI.java:181

    I did not find a way to deactivate that.

    opened by marcoboerner 0
  • MPDbAdapter.generateDataString OutOfMemory Error

    MPDbAdapter.generateDataString OutOfMemory Error

    Hi, In low end devices i see multiple instances this MPDbAdapter.generateDataString(...) gives Out of Memory Error. I have seen the code and found we are asking for 50 records at a time.

    rawDataQuery.append("ORDER BY " + KEY_CREATED_AT + " ASC LIMIT 50");

    Can we make this LIMIT configurable or an optimum number which has less chances to trigger an OutOfMemory Error.

    Stack-trace : java.lang.OutOfMemoryError: Failed to allocate a 73736 byte allocation with 58056 free bytes and 56KB until OOM at java.util.Arrays.copyOf(Arrays.java:3352) at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130) at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114) at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:606) at java.lang.StringBuilder.append(StringBuilder.java:215) at org.json.JSONStringer.string(JSONStringer.java:344) at org.json.JSONStringer.key(JSONStringer.java:375) at org.json.JSONObject.writeTo(JSONObject.java:720) at org.json.JSONStringer.value(JSONStringer.java:237) at org.json.JSONObject.writeTo(JSONObject.java:720) at org.json.JSONStringer.value(JSONStringer.java:237) at org.json.JSONArray.writeTo(JSONArray.java:613) at org.json.JSONArray.toString(JSONArray.java:585) at com.mixpanel.android.mpmetrics.MPDbAdapter.generateDataString(MPDbAdapter.java:579) at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.sendData(AnalyticsMessages.java:527) at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.sendAllData(AnalyticsMessages.java:515) at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.handleMessage(AnalyticsMessages.java:425) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.os.HandlerThread.run(HandlerThread.java:61)

    opened by vikasrathour1 3
  • OpenHarmony support

    OpenHarmony support

    I am developing an OpenHarmony application by JavaScript language which used your library, will your library support OpenHarmony platform by JavaScript language?If so, I want to contribute to the OpenHarmony build of this library.Expecte for your reply!

    opened by Mr-zhao-dy 0
  • Crash: HttpService.java line 113 (com.mixpanel.android.util.HttpService.performRequest)

    Crash: HttpService.java line 113 (com.mixpanel.android.util.HttpService.performRequest)

    Hi guys, Today we noticed a weird crash in our Crashlytics dashboard:

    Fatal Exception: java.lang.NoSuchMethodError: No static method newBuilder()Lcom/google/firebase/perf/v1/NetworkRequestMetric$Builder; in class Lcom/google/firebase/perf/v1/NetworkRequestMetric; or its super classes (declaration of 'com.google.firebase.perf.v1.NetworkRequestMetric' appears in /data/app/gr.androiddev.taxibeat-w4fVWIzh1AjrX8exoOlubw==/base.apk!classes2.dex)
           at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.<init>(NetworkRequestMetricBuilder.java:61)
           at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.<init>(NetworkRequestMetricBuilder.java:92)
           at com.google.firebase.perf.metrics.NetworkRequestMetricBuilder.builder(NetworkRequestMetricBuilder.java:84)
           at com.google.firebase.perf.network.FirebasePerfUrlConnection.instrument(FirebasePerfUrlConnection.java:186)
           at com.mixpanel.android.util.HttpService.performRequest(HttpService.java:113)
           at com.mixpanel.android.mpmetrics.DecideChecker.checkDecide(DecideChecker.java:180)
           at com.mixpanel.android.mpmetrics.DecideChecker.getDecideResponseFromServer(DecideChecker.java:158)
           at com.mixpanel.android.mpmetrics.DecideChecker.runDecideCheck(DecideChecker.java:81)
           at com.mixpanel.android.mpmetrics.DecideChecker.runDecideCheck(DecideChecker.java:60)
           at com.mixpanel.android.mpmetrics.AnalyticsMessages$Worker$AnalyticsMessageHandler.handleMessage(AnalyticsMessages.java:462)
           at android.os.Handler.dispatchMessage(Handler.java:106)
           at android.os.Looper.loop(Looper.java:164)
           at android.os.HandlerThread.run(HandlerThread.java:65)
    

    🔥 Our current Firebase BoM is 29.1.0 which corresponds to version 20.0.5 of our com.google.firebase:firebase-perf-ktx dependency.

    ❓ Could it be a class between our different versions of the Firebase Performance Monitoring lib?

    🙇 Thanks in advance!

    opened by HarisHoulis 2
Releases(v7.2.1)
  • v7.2.1(Nov 16, 2022)

  • v7.2.0(Oct 20, 2022)

    v7.2.0 (2022-10-20)

    Enhancements

    • Add the ability to remove residual image files left from the legacy SDK versions #804 To opt in, add this to AndroidManifest.xml.
    <meta-data android:name="com.mixpanel.android.MPConfig.RemoveLegacyResidualFiles"
                android:value="true" />
    
    • Remove Mixpanel DevX internal tracking #802
    • Upgrade SDK version to 31 #801
    Source code(tar.gz)
    Source code(zip)
  • v7.0.1(Sep 8, 2022)

  • v7.0.0(Aug 16, 2022)

    v7.0.0 (2022-08-16)

    BREAKING CHANGE:

    This major release removes all remaining calls to Mixpanel's /decide API endpoint. The main effect of this is that the SDK no longer fetches the remote status of your project's "Automatically collect common mobile events" setting. From this version forward, automatic event tracking can only be controlled by the, now required, parameter trackAutomaticEvents. Upon upgrading, existing implementations will need to add this parameter to their Mixpanel initializer calls.

    Enhancements

    • Add 'trackAutomaticEvents' as a required param in getInstance' and remove Mixpanel server api call for Autotrack setting #794
    Source code(tar.gz)
    Source code(zip)
  • v6.5.2(Aug 5, 2022)

  • v6.5.1(Jul 26, 2022)

    v6.5.1 (2022-07-26)

    • Add the following new configs for you to optimize the Mixpanel tracking (#795):
         * Set maximum number of events/updates to send in a single network request
         *
         * @param flushBatchSize  int, the number of events to be flushed at a time, defaults to 50
         */
        public void setFlushBatchSize(int flushBatchSize);
    
        /**
         * Set an integer number of bytes, the maximum size limit to the Mixpanel database.
         *
         * @param maximumDatabaseLimit an integer number of bytes, the maximum size limit to the Mixpanel database.
         */
        public void setMaximumDatabaseLimit(int maximumDatabaseLimit);
    

    You can also set them in AndroidManifest.xml, i.e.

            <meta-data android:name="com.mixpanel.android.MPConfig.FlushBatchSize"
                android:value="5" />
    
            <meta-data android:name="com.mixpanel.android.MPConfig.MaximumDatabaseLimit"
                android:value="100000000" />
    
    Source code(tar.gz)
    Source code(zip)
  • v6.4.0(Jun 30, 2022)

    v6.4.0 (2022-06-30)

    Enhancements

    • Support defining multiple instances by specifying instanceName in getInstance #792

    This release adds the following APIs to MixpanelAPI:

    /**
    ...
     * @param instanceName The name you want to uniquely identify the Mixpanel Instance.
       It is useful when you want more than one Mixpanel instance under the same project token.
    ...
    **/
    

    getInstance(Context context, String token, String instanceName) getInstance(Context context, String token, boolean optOutTrackingDefault, String instanceName) getInstance(Context context, String token, JSONObject superProperties, String instanceName) getInstance(Context context, String token, boolean optOutTrackingDefault, JSONObject superProperties, String instanceName)

    Please note: If you are going to add instanceName to getInstance on your existing implementation. getInstance will start using instanceName as the instance identifier rather than token, so you might lose some of the stored properties including the distinct Id under the token. We'd recommend using it when you need to create more than one instance under the same project token. You won't lose any events and user profile updates.

    Source code(tar.gz)
    Source code(zip)
  • v6.3.0(Jun 24, 2022)

  • v6.2.2(May 20, 2022)

  • v6.2.1(May 7, 2022)

  • v6.2.0(May 5, 2022)

    v6.2.0 (2022-05-05)

    From this version, calling People.identify is deprecated, please use MixpanelAPI.identify() and set 'usePeople' to true instead

    Enhancements

    • Make getAnonymousId public. #784
    • Deprecating 'People.identify' and merge it into 'MixpanelAPI.identify' #781
    Source code(tar.gz)
    Source code(zip)
  • v6.1.1(Apr 11, 2022)

  • v6.1.0(Mar 8, 2022)

  • v6.0.0(Jan 2, 2022)

    v6.0.0 (2022-01-02)

    • Remove Messages & Experiments feature, for more detail, please check this post:
    • Deprecate both the Mixpanel default property $google_play_services and tracking Install Referrer in favor of not being marked as containing Ads.
    Source code(tar.gz)
    Source code(zip)
  • v6.0.0-beta2(Dec 18, 2021)

    v6.0.0-beta2 (2021-12-18)

    • Deprecate both the Mixpanel default property $google_play_services and tracking Install Referrer in favor of not being marked as containing Ads.

    On Jan 1, 2022, we’ll remove the Messages & Experiments feature from Mixpanel. For now, you can choose to opt into our beta version without the Messages & Experiments feature support.

    The beta version v6.0.0-beta2 is in parity with v5.9.6 but without the Messages & Experiments feature support. For more details, see our changelog

    To install this SDK, see our integration guide

    Source code(tar.gz)
    Source code(zip)
  • v5.9.6(Dec 14, 2021)

    v5.9.6 (2021-12-14)

    • Remove integrations code for braze and airship #770

    From this version, Mixpanel SDK no longer sets property $braze_external_id and $android_urban_airship_channel_id automatically. Please refer to this doc for the integration setup guide if you need to export Mixpanel Cohorts to Braze or Airship.

    • Readme change: rebrand for live view report to events report #767
    Source code(tar.gz)
    Source code(zip)
  • v5.9.5(Oct 19, 2021)

  • v5.9.4(Oct 8, 2021)

  • v5.9.3(Oct 7, 2021)

    v5.9.3 (2021-10-07)

    Fixes

    • Remove typo in the class name LocalBroadcastManager for reflection #760

    Closed issues:

    • Google Play policy to update targetSdkVersion to 30 #756
    • Failed resolution of: Lcom/google/firebase/iid/FirebaseInstanceId #744
    • Mixpanel using legacy support libs in reflection calls - can't drop jetifier due to this #717
    Source code(tar.gz)
    Source code(zip)
  • v5.9.2(Oct 7, 2021)

    v5.9.2 (2021-10-07)

    Enhancements

    • remove legacy support libs in reflection calls #759
    • Upgrade targetSdkVersion to 30 #758
    • Add explicit exported flag to activities #755

    Closed issues:

    • Crash in v5.9.1, java.lang.AssertionError @ WebSocketImpl.java:675 #757
    • In-app messages cause: IllegalArgumentException: Software rendering doesn't support hardware bitmaps #753
    • Mixpanel.addPushDeviceToken ? #752
    • User profile are not showing on mixpanel dashborad #751
    • SHA-1 usaged flagged as a security risk #750
    • Rejecting re-init on previously-failed class java.lang.Class<com.mixpanel.android.mpmetrics.InstallReferrerPlay>: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/installreferrer/api/InstallReferrerStateListener; #746
    • App crashing with ConcurrentModificationException in Mixpanel SDK code #720
    • In-app messages cause android app crash "Software rendering doesn't support hardware bitmaps" #711

    Merged pull requests:

    • Improve README for the quick start guide #749
    • Add a CHANGELOG placeholder #747
    • Add github workflow for auto release #745
    • Migrate to Github Actions for CI #743
    Source code(tar.gz)
    Source code(zip)
  • v5.9.1(May 18, 2021)

  • v6.0.0-beta1(May 4, 2021)

    On Jan 1, 2022, we’ll remove the Messages & Experiments feature from Mixpanel. For now, you can choose to opt into our beta version without the Messages & Experiments feature support.

    The beta version v6.0.0-beta1 is in parity with v5.9.0 but without the Messages & Experiments feature support. For more details, see our changelog

    To install this SDK, see our integration guide

    Source code(tar.gz)
    Source code(zip)
  • v5.9.0(Apr 29, 2021)

  • v5.8.8(Mar 25, 2021)

  • v5.8.7(Mar 9, 2021)

    • Replace deprecated view drawing cache API https://github.com/mixpanel/mixpanel-android/pull/724

    • Change Android mixpanel default properties ($app_release, $app_build_number) from number to string https://github.com/mixpanel/mixpanel-android/pull/723

    Source code(tar.gz)
    Source code(zip)
  • v5.8.6(Jan 16, 2021)

    Remove the legacy Gesture Tracker that could cause crashes(https://github.com/mixpanel/mixpanel-android/issues/715) PR: https://github.com/mixpanel/mixpanel-android/pull/721

    Source code(tar.gz)
    Source code(zip)
  • v5.8.5(Sep 24, 2020)

    • fix crash MixpanelNotificationRouteActivity.handleRouteIntent https://github.com/mixpanel/mixpanel-android/pull/707

    • fix the crash for android 5.x if the rich notifiction with a button https://github.com/mixpanel/mixpanel-android/pull/706

    Source code(tar.gz)
    Source code(zip)
  • v5.8.4(Jun 29, 2020)

  • v5.8.3(Apr 21, 2020)

    Fixes

    • Remove unused intent filter from activity
    • Fix routing activity bug that made a push action to be repeated when the app was open again

    Features

    • Add option to disable automatic flushing when the app goes into the background. Add the following to you <application> tag on your AndroidManifest.xml if you don't want the SDK to automatically flush its queues when the app goes into the background:
    <meta-data android:name="com.mixpanel.android.MPConfig.FlushOnBackground"
                   android:value="false" /
    
    Source code(tar.gz)
    Source code(zip)
  • v5.8.2(Mar 26, 2020)

    Fixes

    • Added $radio property (iOS parity) as a super property. You'll need to request permission for READ_PHONE_STATE if you want to have access to that property.
    • Ensure web links are always open in a browser
    • Fixed tracking Message Received under certain cases.
    • Added compatibility with installreferrer 1.0 (IllegalArgumentException was thrown - fixes https://github.com/mixpanel/mixpanel-android/issues/678)
    Source code(tar.gz)
    Source code(zip)
Owner
Mixpanel, Inc
Mixpanel, Inc
A tool to install components of the Android SDK into a Maven repository or repository manager to use with the Android Maven Plugin, Gradle and other tools.

Maven Android SDK Deployer Original author including numerous fixes and changes: Manfred Moser [email protected] at simpligility technologies i

simpligility 1.4k Dec 27, 2022
Countly Product Analytics Android SDK

Countly Android SDK We're hiring: Countly is looking for Android SDK developers, full stack devs, devops and growth hackers (remote work). Click this

Countly Team 648 Dec 23, 2022
CleverTap Android SDK

CleverTap Android SDKs ?? Introduction (Back to top) The CleverTap Android SDK for Mobile Customer Engagement and Analytics solutions CleverTap brings

CleverTap 71 Dec 2, 2022
A simple utility to remove unused resources in your Android app to lower the size of the APK. It's based on the Android lint tool output.

android-resource-remover android-resource-remover is utility that removes unused resources reported by Android Lint from your project. The goal is to

Keepsafe 1.3k Dec 16, 2022
This is a Android Studio/ IntelliJ IDEA plugin to localize your Android app, translate your string resources automactically.

#Android Localizationer This is a Android Studio/ IntelliJ IDEA plugin to localize your Android app, translate your string resources automactically. T

Wesley Lin 822 Dec 8, 2022
Automated-build-android-app-with-github-action - CI/CD Automated Build Android App Bundle / APK / Signed With Github Action

Automated Build Android With Using Github Action Project Github Action Script Us

Faisal Amir 34 Dec 19, 2022
proguard resource for Android by wechat team

AndResGuard Read this in other languages: English, 简体中文. AndResGuard is a tooling for reducing your apk size, it works like the ProGuard for Java sour

shwenzhang 8.1k Jan 9, 2023
A super fast build tool for Android, an alternative to Instant Run

Freeline Freeline is a super fast build tool for Android and an alternative to Instant Run. Caching reusable class files and resource indices, it enab

Alibaba 5.5k Jan 2, 2023
Command-line tool to count per-package methods in Android .dex files

dex-method-counts Simple tool to output per-package method counts in an Android DEX executable grouped by package, to aid in getting under the 65,536

Mihai Parparita 2.6k Nov 25, 2022
View Inspection Toolbar for Android Development

View Inspector Plugin View inspection toolbar for android development. Features Boundary show outlines show margins show paddings Layer Scalpel featur

Fumihiro Xue (Peter Hsieh) 2.2k Nov 14, 2022
Make Android screenshots of scrollable screen content

scrollscreenshot Make Android screenshots of scrollable screen content - brought to you by PGS Software SA This tool makes a number of screenshots, sc

PGS Software 714 Dec 7, 2022
🍼Debug Bottle is an Android runtime debug / develop tools written using kotlin language.

???? 中文 / ???? 日本語 / ???? English ?? Debug Bottle An Android debug / develop tools written using Kotlin language. All the features in Debug bottle are

Yuriel Arlencloyn 846 Nov 14, 2022
[] Dissect layout traversals on Android

Probe Dissect layout traversals on Android. Features Intercept View methods. onMeasure(int, int) onLayout(boolean, int, int, int, int) draw(Canvas) an

Lucas Rocha 555 Nov 25, 2022
Android Library Finder

alfi Android Library Finder Search through thousands of android libraries that can help you scale your projects elegantly Usage Search for something a

César Ferreira 509 Dec 8, 2022
Annotation based simple API flavored with AOP to handle new Android runtime permission model

Let Annotation based simple API flavoured with AOP to handle new Android runtime permission model. If you check Google's Samples about the new permiss

Can Elmas 530 Nov 25, 2022
Combines tools for fast android app devlopment

Android - Rapid Test Driven Development Combine tools to generate most of the boilerplate code. Examples how to test different aspects of an android a

Nico Küchler 379 Nov 25, 2022
Make mosaic effect on android

ProMosaic Make mosaic for image on android. Features Select Mode Follow finger Select rectangle Effect Mode Grid color based on original image Blur Im

dawson 359 Dec 29, 2022
A set of Android tools that facilitate apps development

A set of Android tools that facilitate apps development Well, this repo contains pretty much code used internally at Stanfy to develop Android apps. S

Stanfy 183 Dec 3, 2022