Let's get familiar with Pushlink features


JAR File




How to use Pushlink?

Android 7 requirement

Concerned about security?


It's very common to run Pushlink behind a firewall in a LAN environment. See the names we use:

Android & Downgrade

Android has changed its behaviour when installing a new apk file. Until ICS (ice cream sandwich), it didn't mater if the new apk had a lower or higher android:versionCode in AndroidManifest.xml. After that, it's mandatory a higher versionCode. In fact, we can't guarantee "when" the new behavior was introduced, but we noticed it was sometime around Jelly Bean.

When trying to install a lower version code through adb, you will get the message: INSTALL_FAILED_VERSION_DOWNGRADE. In this case you can force with the undocumented -d flag: adb install -r -d my.apk. Pushlink can't force it because it just launches the apk and the control is passed to the OS. So, the installation process will fail with no specific error message.

Keep in mind that Pushlink can't perform downgrades when the OS does not allow.

Android 7

Android 7 (Nougat) [Build.VERSION.SDK_INT >= 24] requires a FileProvider in the AndroidManifest.xml, otherwise Pushlink will not work.

Don't forget to replace [] with your current application package name.

Update Stratagies

NINJA (Only for rooted devices)
CUSTOM (Take full control of your installation)
STATUS_BAR (Default Pushlink Strategy)
FRIENDLY_POPUP (Usefull for fullscreen apps)
ANNOYING_POPUP (Usefull for fullscreen apps when updates can't wait)
When using popups, don't forget to call PushLink.setCurrentActivity(this); inside onResume.


You can customize the built in strategies like this:

Custom Strategy

You can also take full control using the CUSTOM strategy.



Ninja requires this broadcast receiver declaration in AndroidManifest.xml to work on android 5 or higher.




Add some metadata to identify the device/user:

Manual Checking

PushLink.hasPendingUpdate() is designed to notify again a skipped update using friendlypopup before the reminder tick. If there is a new version but it wasn't downloaded yet, this method returns FALSE.

Exception Notification

  1. Pushlink catches all unhandled exceptions in your app by default. It doesn't block the natural exceptions life cycle.
  2. You can also send handled exceptions calling PushLink.sendAsyncException().
  3. Pushlink always sends the exceptions asynchronously and garantees its delivery.
  4. If you also want to get the last 100 LogCat's lines, just add "android.permission.READ_LOGS" in AndroidManifest.xml
Sending limit
Logcat messages

API Docs

Metadata API

To get XML output:

To get JSON output:

Upload API

After uploading you might set the apk as current manually in the web administration

curl -F "apiKey=yourApiKey" -F "apk=@yourApp.apk"

Raw text responses:

Download API

Download the current APK
curl -o yourApp.apk ''


PushLinkAndroid-5.5.2.jar 2016.11.11
  • Now it works on android 7 (Nougat) [Build.VERSION.SDK_INT >= 24]. It requires a <provider android:name="" android:authorities="" android:exported="true" /> in AndroidManifest.xml
  • Now pushlink cleanup old downloaded apks.
  • New custom strategy is available.
PushLinkAndroid-5.5.0.jar 2016.04.18
  • Fixed ninja NPE when using broadcast receiver
PushLinkAndroid-5.4.5.jar 2016.03.13
  • Ninja fallback. (If broadcast receiver is not present, it uses the classic ninja.)
  • Commons network exceptions now are debug level in logcat
PushLinkAndroid-5.4.4.jar 2016.03.01
  • Ninja now works in android 5 or higher. Its requires the <receiver android:name="" /> in AndroidManifest.xml
  • Ninja.setExtraShellCommand deprecated in favor to setBeforeNinjaTaskShellCommand
  • Available from Maven and Gradle by jitack
PushLinkAndroid-5.4.3.jar 2016.02.29
  • Bad release. (Not available anymore)
PushLinkAndroid-5.4.2.jar 2015.12.03
  • Bug fix: Pushlink.hasPendingUpdate does not ignore the idle status anymore (Pushlink.idle method)
PushLinkAndroid-5.4.1.jar 2015.11.25
  • Now Ninja is working in Android 64 bits
  • Ninja does not execute the "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/system/lib" command anymore
  • New method Ninja.setExtraShellCommand for custom workarounds
  • Now Pushlink logs the entire stack trace. (No more clipping)
PushLinkAndroid-5.4.0.jar 2015.09.30
  • Fixed critical bug when using android:process
  • New api method setMaxExceptionQueueSize (to avoid huge cache)
PushLinkAndroid-5.3.0.jar 2015.04.02
  • Download resume. (Very welcome!)
  • Bug fix that would send old exception assigned with wrong version label.
  • Bug fix that in addMetadata/addExceptionMetadata when key == null. Not allowed anymore.
  • Now it prevents to send the very same exception twice or more.
  • Less data transfer when using the metadata api.
  • Now setCurrentActivity and setCurrentStrategy are independent of start method.
  • Some timeout adjustments
PushLinkAndroid-5.1.0.jar 2013.12.14
  • NINJA strategy improved. Now working in a large variety of devices.
  • Now PushLink uses only the 443 port. Goodbye 6670 port.
PushLinkAndroid-5.0.4.jar 2013.11.12
  • Download method improved to avoid memory overflow.
  • Popup strategies no more play notification sound.
  • Now popup strategies ask for launching the app even in ICS or later.
PushLinkAndroid-5.0.3.jar 2013.07.31
  • Now it sends the last 200 lines of logcat. (no more 100)
  • Now exceptions has a handled/unhandled label
  • New method PushLink.addExceptionMetadata. This metadata is going to appear ONLY in the "Exceptions" tab of the web administration
PushLinkAndroid-5.0.2.jar 2013.06.17
  • Important bug fix. PushLink.addMetadata wasn't working fine.
  • TCP client improvement. It was aborting connections sometimes.
  • Installation checking for duplicated ID's improved.
  • Method name changed! PushLink.serCurrentPopUpTarget is now PushLink.setCurrentActivity.
  • Now PushLink grabs screenshots for unhandled exceptions.
PushLinkAndroid-5.0.1.jar 2013.02.21
  • Logging improvements
  • Bug fix. Calling PushLink.setCurrentStrategy before PushLink.start had no effect.
PushLinkAndroid-5.0.0.jar 2013.02.06
  • Package change. Now all classes are under ""
  • Critical bug fix. Heartbeat was not working when devices were sleeping.
  • Device ID is back. Now the user MUST set the device id. Now the web administration show off-line installations again.
  • Api change to support device ID: Now PushLink.start has a brand new fourth parameter. The device ID.
  • Method name changed from PushLink.sendAsyncNotification to PushLink.sendAsyncException.
  • Pushink now has two lightweight threads. They were named as "PushLink-PushListener" and "PushLink-Heartbeat".
PushLinkAndroid-4.2.1.jar 2012.12.25
  • Huge logging improvements
PushLinkAndroid-4.2.0.jar 2012.12.17
  • Critical bug fix. Low socket/connection timeout was killing some APK downloads.
  • Now exceptions are always send lazily with delivery guarantee. PushLink holds the exception (sqlite persistence) until it can be sent to the server. PushLink.sendSyncException was removed.
  • New method PushLink.hasPengingUpdate. This method checks if there is a downloaded but not applied update. It also notify the user again.
  • Log messages improved
PushLinkAndroid-4.1.1.jar 2012.11.12
  • PushLink.sendExceptionNotification has changed to PushLink.sendAsyncException/PushLink.sendSyncException
  • Fixed NPE when setCurrentPopUpTarget called before PushLink.start
  • When popup strategies were configured before PushLink.start, the popup title would appear "Application" instead the real application name. Fixed!
  • Log messages improved
PushLinkAndroid-4.1.0.jar 2012.09.26
  • Lighter. HttpClient code improvement. Less data transfered between server and client.
PushLinkAndroid-4.0.0.jar 2012.09.14
  • Popups strategies now supports screen rotation
  • Popups strategies now can work well even if you do not use PushLink.setCurrentPopUpTarget(this); in all activities
  • It is ready to show online installations in the web administration
  • Fixed some minor bugs that could happen in push notification
  • PushLink.addGlobalInfo has changed to PushLink.addMetadata
PushLinkAndroid-3.1.3.jar 2012.07.27
  • Fixed a NPE that would appear in some cases
  • Fixed some confusing log informations
PushLinkAndroid-3.1.2.jar 2012.06.06
  • API method PushLink.idle(boolean) added. Especially useful for NINJA strategy to update your app only when it is idle. See the usage in JAVADOC.
  • Now it sends device coordinates if the GPS is enabled. This is sent only once when the app is started.
PushLinkAndroid-3.1.1.jar 2012.05.04
  • Bug fixed. It could happen to receive several notifications to the same version in some specific situations.
PushLinkAndroid-3.1.0.jar 2012.04.23
  • NINJA strategy has been created. Only for rooted devices. BETA!
  • Logging improvements.
PushLinkAndroid-3.0.0.jar 2012.04.20
  • Full redesing to support premium features.
  • Push.checkForUpdates in no longer available. There is no sense using it the new push architecture.
  • Push.start method has changed. Now it has only three parameters
  • Notification now play standrd device sound
  • Automatic exception catch/send notification is the default.
  • Added two method. PushLink.disableExceptionNotification and PushLink.enableExceptionNotification
PushLinkAndroid-2.0.4.jar 2012.03.07
  • Push.addUserInfoForExceptionNotification is now Push.addGlobalInfo. This information is going to appear in all exceptions notifications sent.
  • Push.sendExceptionNotification(Throable) was overloaded with Push.sendExceptionNotification(Throwable, Map). Now it's possible to send more information about the exception context in Map.
  • Professional JAVADOC added
PushLinkAndroid-2.0.3.jar 2012.03.04
  • Push.requestUpdateRightNow is now Push.checkForUpdates
  • Now Push.checkForUpdates does not block the thread anymore.
  • Push.checkForUpdates bug fix. It was rushing the download but not the notification.
PushLinkAndroid-2.0.2.jar 2012.02.20
  • Now if exceptionNotification is set to false and you call PushLink.sendExceptionNotification it will not throw an exception anymore. It only will log: "You must start pushlink enabling exception notification before using PushLink.sendExceptionNotification or PushLink.addUserInfoForExceptionNotification. Check PushLink.start method exceptionNotification parameter."
PushLinkAndroid-2.0.1.jar 2012.02.01
  • Exception notification now sends LogCat (Need READ_LOGS permission)
  • Exception notification now sends the whole stack trace
  • Fixed some exception notification bugs
PushLinkAndroid-2.0.0.jar 2012.01.20
  • API Redesigned. All PushLink's method are static.
  • There is no method "stop" anymore.
  • Now we have exception notification! Recieve emails when your app crashes.
  • New API method "Pushlink.requestUpdateRightNow()" to rush version check.
PushLinkAndroid-1.1.3.jar 2011.12.01
  • Now popups strategies work nice with PushLink.setCurrentPopUpTarget
PushLinkAndroid-1.1.2.jar 2011.11.22
  • Fixed java.lang.NoClassDefFoundError: when runnig on ADT emulator
PushLinkAndroid-1.1.1.jar 2011.11.17
  • Pop Up strategy support
  • i18n support
PushLinkAndroid-1.1.0.jar 2011.11.03
  • SSL Support
  • Internal storage bug fix
PushLinkAndroid-1.0.0.jar 2011.10.28
  • Beta test