Saturday, June 29, 2013

AndroidQuery Future Direction


AndroidQuery (AQuery) is an open source light-weight library for doing asynchronous tasks and manipulating UI elements in Android. Our goal is to make Android coding simpler, easier, and more fun!


Update (11/02/2013)

Thanks for the feedback!

Many developers sent me requests to add a simple donation method, and here we go:

The funding will be used to improve documentation/website and future aq development.

Future Direction

Hello aq users!

My name is Peter Liu, the founder of AQuery.

I am writing this blog to get some input on how AQuery can move forward as a good development library/framework for the Android community.

Many of you might not know, AQuery is almost 2 years old! 

It started from a development framework that I wrote for my Android projects. It continue to grow as I re-factor features from my work projects and receive code contributions from the AQ community.

Re-factor and generalize features developed from my day work; review feature requests from the community; fix bugs; write test cases; answer development questions in the forum; release builds...

These are what I do to maintain the AQ project, 

and I enjoy every moment of it. 

"AndroidQuery is the best Android lib I've ever used. It's true."

"thanks for android-query it's one of the simplest yet powerful android
libs I've used. +1"

"Thank you for the continuous development of AQuery. I will not develop Android apps without it!"

There's nothing more satisfying than receiving thank you notes from fellow developers. :)


Current Status

In this past 2 years, the AQuery community has grown to thousands of developers (download/watch/fork from GoogleCode and GitHub).

As more people use it, more requests and ideas comes in to improve AQuery.


New Features

Below are some of the bigger features that I want to add in the future, depending on the actual demand from the AQuery community. These features are already developed and used in live production apps, but I couldn’t find the time and effort to re-factor them into AQ.


Simple Datastore (SQLite) Query and Store

This feature is implemented 2 years ago. It’s a non-intrusive way to query sql lite database with AQ-style callback.

The idea is to have a simplest way to asynchronously query a database in Android. Developers can still use their own way or other libs to manage the database.

Here’s is how it works:

//getting a datastore that correspond to an SQL lite database
Datastore ds = aq.getDatastore("mydb");


//perform a db query on object class "Content"
private void query(){

Query query = new Query(Content.class).selection("purl = ? and type = ? and created < ?", new String[]{url, "Page", time})
.order("created desc").range(from, to).index("purl", "type", "created");, this, "queryCb");


//callback handler
public void queryCb(Query query, List<Content> items, AjaxStatus status){

//do something with the objects

private void store(){

//store object asynchronously;;

Data Object
public class Content implements Serializable, Entity, Cloneable{


public void to(ContentValues values) {

values.put("url", url);
values.put("type", type);
values.put("created", created);


public void from(ContentValues values) {

this.url = values.getAsString("url");
this.type = values.getAsString("type");
this.created = values.getAsLong("created");





Non-Http Async Tasks


Other than HTTP network requests, there are still many async tasks that can be simplified in Android.

Here’s a list of async callbacks that I have written but not re-factor into AQ.

Wifi Management

Asynchronous callbacks to scan, connect, disconnect Wifi networks.


Asynchronous callbacks to print receipts to different receipt printers.

Content Providers

Asynchronous callbacks to query other Android content providers such as the MediaStore.

PlayStore (Market)

Asynchronous callbacks to PlayStore API to make in-app purchase and query purchase history.


HTTP Async Message Queue

An asynchronous message queue for http requests that guarantee eventual delivery of the message. This feature is implemented for delivering important messages on a unstable/transient network connectivity, which describes pretty much any mobile devices without a physical network connection.


Personal Workload and Responsibilities

AQuery was started as a hobby with my spare time.

However, as time goes by, more ideas and features comes in, and as time goes by, the workload to maintain the AQuery project and the responsibility for my day work also increases significantly.

As a result, I found it very difficult to contribute as much as I wanted to the AQuery project at this stage.


My Proposal to the Android Community

There are tons of new improvements and features I want to develop and share with the Android community and I don’t want to stop here.

I want to push the project forward by hiring a full-time developer to maintain the project, with my daily supervision and continue along with my own contributions.

Here’s what will be improved:

  • better documentation
  • better website
  • more comprehensive test case and coverage
  • performance test
  • more time to work on community requests
  • more time to fix/investigate bugs
  • more time to merge community code contributions
  • more time to add new features (some listed in the blog)
  • promote aquery



For ways to fund the salary of a full time developer, I can think of these methods:

  • KickStarter
    • I never did these kind of campaigns, and I am not sure about the public’s interest in open-source software projects like AQuery
    • Will ask for 1 year funding
  • Paypal donation button
    • Ongoing
    • Hire a developer when fund can support 6 months salary.
  • Ask funding from other organizations
    • What organization to ask?

Please spend a minute to vote and express your support/concern on this issue. It will help me to decide what to do next with the project.



Please leave a comment, or send direct feedback to

Thank you for your support.

AQuery Demo App