principalmente no lado Android, testando tudo de forma local.Voce podera efetuar o download do codigo fonte diretamente do meu GitHub, no botao abaixo:DOWNLOAD CODIGONa Figura 1 abaixo voce pode visualizar como ficarao nossas telas ao final da implementacao:Configurando o projeto AndroidAntes de criar o projeto, precisamos efetuar o download do PayPal Android SDK. Extraia os arquivos em uma pasta de preferencia.Mais uma vez, voce pode se sentir a vontade para usar o Eclipse Android Bundle ou o AndroidStudio para programar a parte Android, desde que tenha boa experiencia em ambas as ferramentas.Crie um novo projeto Android no Eclipse atraves das opcoes File > New > Android Application Project e preencha todas as informacoes, tais como pacote e nome do projeto.Copie todo o conteudo da pasta libs do PayPal Android SDK que voce baixou anteriormente e cole na pasta libs do seu projeto recem criado, que devera ser semelhante a estrutura mostrada na Figura 1.Figura 1. Criando App PayPalAbra agora o arquivo colors.xml do seu projeto (ou crie um se nao tiver) e adicione o conteudo da listagem abaixo:<?xml version="1.0" encoding="utf-8"?><resources> <color name="categoria">#666666</color> <color name="valor">#888888</color> <color name="list_divisor">#d9d9d9</color> <color name="linha_cor_inicio">#ffffff</color> <color name="linha_cor_fim">#ffffff</color> <color name="linha_cor_inicio_hover">#ebeef0</color> <color name="linha_cor_fim_hover">#ebeef0</color></resources>Essas cores serao usadas posteriormente para outras finalidades. Atualize o seu arquivo de strings.xml com algumas chaves que iremos usar nos layouts:<string name="paypal_client">Cliente PayPal</string><string name="checkout">Checkout</string><string name="add_carrinho">Add ao Carrinho</string>Note que na Figura 1 nos estamos fazendo uso de algumas outras bibliotecas como a do Volley, para fazer chamadas a servicos na rede. Baixe a biblioteca e add ao seu classpath.Crie a classe BitMapCache que sera responsavel por cachear as requisicoes via Volley no que se refere as imagens da nossa listagem:package br.edu.ecommerce.custom.util;import com.android.volley.toolbox.ImageLoader.ImageCache;import android.graphics.Bitmap;import android.support.v4.util.LruCache;/** * Classe responsAvel por manter o cache das informaAAes de imagens em disco. */public class BitMapCache extends LruCache<String, Bitmap> implements ImageCache { public BitMapCache() { this(getDefaultCacheSize()); } public BitMapCache(int maxSize) { super(maxSize); } public static int getDefaultCacheSize() { final int memoriaMax = (int) (Runtime.getRuntime().maxMemory() / 1024); final int tamanhoCache = memoriaMax / 8; return tamanhoCache; } @Override protected int sizeOf(String key, Bitmap value) { return value.getRowBytes() * value.getHeight() / 1024; } @Override public Bitmap getBitmap(String url) { return get(url); } @Override public void putBitmap(String url, Bitmap valor) { put(url, valor); }}Apos isso, criaremos tambem uma classe chamada AppController que sera responsavel por estender de Application e gerenciar os objetos volley ha cada requisicao:package br.edu.ecommerce.custom.app;import br.edu.ecommerce.custom.util.BitMapCache;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.Volley;import android.app.Application;import android.text.TextUtils;public class AppController extends Application { private static final String TAG = AppController.class.getSimpleName(); private static AppController appController; private RequestQueue requestQueue; private ImageLoader imageLoader; @Override public void onCreate() { super.onCreate(); appController = this; } public static synchronized AppController getInstance() { return appController; } public RequestQueue getRequestQueue() { if (requestQueue == null) { requestQueue = Volley.newRequestQueue(getApplicationContext()); } return requestQueue; } public ImageLoader getImageLoader() { getRequestQueue(); if (imageLoader == null) { imageLoader = new ImageLoader(requestQueue, new BitMapCache()); } return imageLoader; } public <T> void addToRequestQueue(Request<T> request, String tag) { request.setTag(TextUtils.isEmpty(tag) ? TAG : tag); getRequestQueue().add(request); } public <T> void addToRequestQueue(Request<T> request) { request.setTag(TAG); getRequestQueue().add(request); } public void cancelarRequestPending(Object tag) { if (requestQueue != null) { requestQueue.cancelAll(tag); } }}Essas