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
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
LocationManager Wrapper for Android

Locationmanager Locationmanager is a small wrapper for Location Tracker. Installation Add jitpackto your repositories in Project build.gradle : allpro

Thomas Cirksena 19 Jan 19, 2022
Official Mixpanel Android SDK

Latest Version March 25, 2021 - v5.8.8 Table of Contents Quick Start Guide Installation Integration I want to know more! Want to Contribute? Changelog

Mixpanel, Inc 978 Jan 9, 2023
Official Appwrite Android SDK 💚 🤖

Appwrite Android SDK This SDK is compatible with Appwrite server version 0.8.x. For older versions, please check previous releases. Appwrite is an ope

Appwrite 62 Dec 18, 2022
The official CovPass(-Check) Android apps and SDK.

android-covpass-app This repo contains the CovPass app and commonly needed modules for Kotlin + Android. The most important modules are: android-utils

null 181 Dec 8, 2022
Official Appwrite Kotlin SDK 💙🧡

Appwrite Kotlin SDK This SDK is compatible with Appwrite server version 0.11.x. For older versions, please check previous releases. This is the Kotlin

Appwrite 47 Nov 26, 2022
A simple Android app to demonstrate the use of Hover SDK for M-PESA Send Money while offline. This SDK does not require an internet connection, it automates USSD sessions in the background of an android application.

HoverSDKDemo Hover SDK is an Android SDK that lets mobile developers to add money features to the applications. This SDK does not require an internet

Joel Kanyi 9 Dec 21, 2022
Sdk-android - SnapOdds Android SDK

Documentation For the full API documentation go to https://snapodds.github.io/sd

Snapodds 0 Jan 30, 2022
Unity-Android-SDK-Plugins - Android SDK/Library/Plugins (aar) for Unity Developers

Unity Android SDK Plugins Unity Android SDK Plugins is an Open Source project th

NNK 1 Aug 14, 2022
StudyLive是anyRTC开发的示例项目,演示了如何通过anyRTC云服务,配合anyRTC RTC SDK、anyRTC RTM SDK、anyRTC播放插件,实现在线自习室的场景。

StudyLive 项目概述 StudyLive是anyRTC开发的示例项目,演示了如何通过anyRTC云服务,配合anyRTC RTC SDK、anyRTC RTM SDK,实现在线自习室的场景。 平台兼容 iOS 9 及以上。 Android 4.4 及以上 效果展示 上麦用户调用图 主持人的使

anyrtcIO 11 Oct 19, 2022
Segmenkt - The SegmenKT Kotlin SDK is a Kotlin-first SDK for Segment

SegmenKT Kotlin SDK The SegmenKT Kotlin SDK is a Kotlin-first SDK for Segment. I

UNiDAYS 0 Nov 25, 2022
Frogo SDK - SDK Core for Easy Development

SDK for anything your problem to make easier developing android apps

Frogobox 10 Dec 15, 2022
HubSpot Kotlin SDK 🧺 Implementation of HubSpot API for Java/Kotlin in tiny SDK

HubSpot Kotlin SDK ?? Implementation of HubSpot API for Java/Kotlin in tiny SDK

BOOM 3 Oct 27, 2022
gradle-android-scala-plugin adds scala language support to official gradle android plugin

gradle-android-scala-plugin gradle-android-scala-plugin adds scala language support to official gradle android plugin. See also sample projects at htt

saturday06 345 Dec 10, 2022
GitHub client for Android based on the abandoned official app

ForkHub ForkHub started off as a fork of the official Android app from GitHub, and has since seen lots of improvements. You can see a comprehensive li

Jon Ander Peñalba 2.8k Dec 28, 2022
Replacement for deprecated official Android crop image function

The MIT License (MIT) Copyright (c) 2012 Jan Muller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and

Jan Muller 561 Nov 25, 2022
An Android library aimed to get the beautiful CardViews that Google shows at its official design specifications

MaterialList Discontinued This library will not receive any updates, as I do not have the time or knowledge to improve it. If anyone forks it and want

null 1.6k Nov 29, 2022
a version of the official Android openssl setup to build standalone for use in app

OpenSSL on the Android platform. --- The code in this directory is based on $OPENSSL_VERSION in the file openssl.version. See patches/README for more

Guardian Project 371 Dec 8, 2022
An unofficial Zerotier Android client patched from official client

An unofficial Zerotier Android client patched from official client

KAAAsS 819 Dec 29, 2022
The official repo for Blokada for Android and iOS.

Blokada 5 Blokada 5 is the next generation of the well known open source mobile ad blocker and privacy app. Want to try it out? Click here to download

Blokada (ad blocker) 2.8k Jan 7, 2023