Android Virtual Device y HDroidGUI

Para quienes quieren utilizar el emulador de Android, encuentran en c:\android\sdk el archivo “AVD Manager.exe” con el que podemos generar los diferentes dispositivos que necesitamos emular.

2015-04-19_172246

Existe una larga lista de dispositivos predefinidos,

2015-04-19_172333

Seleccionamos el dispositivo virtual y presionamos el botón Start,

2015-04-19_172443
Seleccionamos las opciones que se acomoden a nuestro monitor,

2015-04-19_172510
2015-04-19_172913

Hay que tener mucha paciencia … … … …

2015-04-19_173348

Ahora estamos listos para probar nuestra aplicación HDroidGUI

Ejecutamos el archivo c:\Android\projects\hddemo\run.bat

 @call setenv
if "%1" == "1" goto run

call %ADB% uninstall %PACKAGE%
call %ADB% install bin/%APPNAME%.apk

:run
call %ADB% shell logcat -c
call %ADB% shell am start -n %PACKAGE%/%PACKAGE%.%MAIN_CLASS%
call %ADB% shell logcat Harbour:I *:S > log.txt

Básicamente lo que hace es instalar o desinstalar y lanzar la aplicación en el emulador

2015-04-19_173542

2015-04-19_173603
El resultado en el emulador.

Comandos HDroidGUI

INIT WINDOW

Implementa una ventana de la interfaz (Android Activity), asegúrese de usar ACTIVATE WINDOW para completar el ciclo lógico.

   INIT WINDOW <oWnd> TITLE <cTitle>;

             [ON INIT <binit>];

             [ON EXIT <bExit>]

ownd – un objeto de clase HDActivity.

cTitle – El título de la ventana.

bInit – bloque de código ejecutado inmediatamente después de crear la ventana.

bExit – bloque de código que se ejecuta antes de cerrar la ventana.

 

 

ACTIVATE WINDOW

Completa la descripción de la ventana de la interfaz y la envía al sistema para su creación.

   ACTIVATE WINDOW <oWnd>

oWnd – Objeto ventana creado con  INIT WINDOW .

 

 

INIT DIALOG

Descripción de un diálogo. Tenga en cuenta que el diálogo aquí es principalmente para implementar funciones como hd_MsgInfo(), hd_MsgYesNo(), etc. Tiene una estructura diferente de una ventana normal (Activity). Úselo sólo si tiene una buena idea de lo que está haciendo.

 

   INIT DIALOG <oDlg> [TITLE <cTitle>];

[ON INIT <binit>];

[ON EXIT <bExit>]

oDlg – un objeto de clase HDDialog.

cTitle – Título  de cuadro de diálogo.

bInit -. Codeblock ejecutado inmediatamente después de la apertura de un diálogo

bExit – bloque de código que se ejecuta antes de cerrar el diálogo.

 

 

ACTIVATE DIALOG

Completa la descripción de la interfaz de diálogo y lo envía al sistema para crear.

   ACTIVATE DIALOG <oDlg>

oDlg – objeto diálogo creado con INIT DIALOG .

 

 

BEGIN LAYOUT

Este widget – es un contenedor de otros componentes, para su anuncio debe seguir las instrucciones de los componentes se colocarán consecutivamente en el mismo (botones, texto, etc.). Para concluir debe estar END LAYOUT. El contenedor puede ser horizontal – en este caso los sub-componentes dispuestos de izquierda a derecha, o verticalmente – entonces, respectivamente, de arriba a abajo.

   BEGIN LAYOUT <Olay>;

[<lHorz: HORIZONTAL>];

[SIZE <width>, <height>];

[BACKCOLOR <bcolor>];

[Font <oFont>];

oLay -. un objeto de clase HDLayout

HORIZONTAL – si hay una palabra, el contenedor se define como horizontal (por defecto – vertical).
width, height – anchura y altura. Tamaño en DP (Density-independent Pixels). También puede utilizar las constantes MATCH_PARENT (anchura máxima posible o altura dentro de la matriz) o WRAP_CONTET (anchura o altura está determinada por el contenido del elemento).

bcolor – color de fondo se puede especificar en número hexadecimal o una representación de cadena (#FFFFFF).

oFont – un objeto de clase HDFont .

 

 

END LAYOUT

Completa la descripción del contenedor.

   END LAYOUT <Olay>

oLay – Objeto contenedor creado por BEGIN LAYOUT .

 

 

TEXTVIEW

Este comando crea un TextView – componente GUI Android que muestra texto estático.

   TEXTVIEW <oText>;

[TEXT <cText>];

[SIZE <width>, <height>];

[TEXTCOLOR <tColor>];

[BACKCOLOR <bcolor>];

[FONT <oFont>];

[<lVScroll: VSCROLL>]

oText -. un objeto de clase HDTextView

Ctext – el texto que aparece en el TextView .

width, height – anchura y altura.

tColor, bcolor – texto y color de fondo, respectivamente. Puede ser especificado en número hexadecimal o una representación de cadena (#FFFFFF).

oFont – un objeto de clase HDFont.

VSCROLL -. Establece el desplazamiento vertical

 

 

BUTTON

Creación de un botón.

   BUTTON <oBtn>;

[TEXT <cText>];

[SIZE <width>, <height>];

[TEXTCOLOR <TColor>];

[BACKCOLOR <bcolor>];

[FONT <oFont>];

[ON CLICK <bClick>]

oBtn – un objeto de clase HDButton.

cText – el texto que aparece en el botón.

width,height – anchura y altura.

tColor, bcolor – texto y color de fondo, respectivamente. Puede ser especificado en número hexadecimal o una representación de cadena (#FFFFFF).

oFont – un objeto de clase HDFont.

bClick -. Codeblock ejecutado al presionar el botón

 

 

EDITBOX

Creación de un componente para la introducción de texto

   EDITBOX <oEdit>;

[TEXT <cText>];

[HINT <Chint>];

[PASSWORD];

[SIZE <width>, <height>];

[TEXTCOLOR <tColor>];

[BACKCOLOR <bcolor>];

[FONT <oFont>];

[ON KEYDOWN <bKeyDown>]

oEdit -. un objeto de clase HDEdit

cText -. texto

Chint – pista – el texto que aparece en el cuadro de edición cuando este componente está vacía.

width, height – anchura y altura.

tColor, bcolor – texto y color de fondo, respectivamente. Puede ser especificado en número hexadecimal o una representación de cadena (#FFFFFF).

oFont – un objeto de clase HDFont.

bKeyDown -. Codeblock ejecutados al ingresar el siguiente carácter

 

 

CHECKBOX

   CHEKBOX <oChe>;

[TEXT <cText>];

[SIZE <width>, <height>];

[TEXTCOLOR <TColor>];

[BACKCOLOR <bcolor>];

[FONT <oFont>]

oChe – un objeto de clase HDCheckBox.

cText -. texto

width, height – anchura y altura.

TColor, bcolor – texto y color de fondo, respectivamente. Puede ser especificado en número hexadecimal o una representación de cadena (#FFFFFF).

oFont -. un objeto de clase HDFont

 

 

BROWSE ARRAY

   BROWSE <oBrw> ARRAY <aArr>;

[SIZE <width>, <height>];

[<lHScroll: HSCROLL>];

[ON CLICK <bClick>];

oBrw – un objeto de clase HDBrwArray.

width, height – anchura y altura.

HSCROLL – establece el desplazamiento horizontal.

 

 

BROWSE DBF

   BROWSE <oBrw> DBF <cAlias>;

[FILTER <xFilter>];

[SIZE <width>, <height>];

[<LHScroll: HSCROLL>];

[ON CLICK <bClick>];

oBrw – un objeto de clase HDBrwDbf.

width, height – anchura y altura.

HSCROLL – establece el desplazamiento horizontal.

bClick – bloque de código ejecuta cuando se selecciona una fila.

 

 

PREPARE FONT

Crear un nuevo tipo de letra

   PREPARE FONT <oFont>;

[FACE <face>];

[STYLE <style>];

[HEIGHT <height>];

oFont . – un objeto de clase HDFont

face – ¿Puede ser uno de los valores: FONT_NORMAL, FONT_SANS, FONT_SERIF, FONT_MONOSPACE .

style – puede ser uno de los valores: FONT_BOLD, FONT_ITALIC, FONT_BOLD_ITALIC .

height – el tamaño de la fuente en dp .

 

 

MENU

Anuncios menú para la WINDOW actual (Activity). Después de este comando debe ir seguido de uno o más MENUITEM y, finalmente, MENUITEM .

    MENU [ID <nId>] [TITLE <cTitle>]

nId – todavía no se utiliza.

cTitle – aún no se utilizan.

 

 

ENDMENU

Menú anuncios de terminación.

    ENDMENU

 

 

MENUITEM

Elemento de menú.

    MENUITEM <cTitle> [ID <nId>];

ACTION <bAction>

cTitle -. el nombre del elemento de menú

nId – identificador numérico. Si no se especifica, se genera automáticamente.

bAction – bloque de código ejecuta cuando se selecciona esta opción ..

 

 

SET TIMER

Ajuste el temporizador.

   SET TIMER <oTimer>;

VALUE <value> ACTION <bAction>

oTimer -. un objeto de clase HDTimer

value – la frecuencia del temporizador de activación en milisegundos.

bAction – bloque de código que se llama cuando el temporizador.

 

 

INIT NOTIFICATION

Preparación aviso. Notificación preparado se puede enviar por oNotify:Run().

   INIT NOTIFICATION <oNotify> TITLE <cTitle>;

[TEXT <cText>];

[SUBTEXT <cSubText>];

[<Llight: LIGHT>];

[<LSound: SOUND>];

[<LVibr: VIBRATION>]

oNotify – un objeto de clase HDNotify.

cTitle – cabecera de la notificación.

cText – texto de la notificación.

cSubText -. texto adicional, más detallada LIGHT, SOUND, VIBRATION -. al especificar estas palabras, la notificación deberá ir acompañada, respectivamente, mediante el parpadeo de los LED, sonido o vibración

 

 

SET MARGINS

   SET <oWidget> MARGINS [LEFT <ml>] [TOP <mt>] [RIGHT <mr>] [BOTTOM <mb>]

oWidget – widget de objeto para la cual se definen los parámetros. ml, mt, sr, mb –

 

 

SET PADDING

   SET <oWidget> PADDING [LEFT <pl>] [TOP <pt>] [RIGHT <pr>] [BOTTOM <pb>]

oWidget – widget de objeto que se define con los parámetros. pl, pt, pt, pb –

Primer proyecto HDroidGUI

Para crear un nuevo proyecto en HDroidGUI debemos compilar la herramienta que esta en la carpeta c:\Android\projects\HDroidGUI\utils\newproject.prg

Abrimos símbolo de sistema (Consola) y escribimos:
c:\Android\projects\HDroidGUI\utils>c:\hb32\bin\hbmk2 newproject -lhbct

2015-04-14_181502
Copiamos el ejecutable a la carpeta projects,

2015-04-14_183435
Vamos a la carpeta projects,

2015-04-14_183835

newproject [hrb] [-path=PATHtoHDROIDGUI] [-pass=cPassword] cFullPackageName

Para crear el nuevo proyecto escribimos:
newproject -path=c:\android\projects\hdroidgui -pass=android su.nuevo1.myproj1

2015-04-14_184232
Se creará el proyecto y queda con la siguiente estructura:

2015-04-14_185015

En la carpeta c:\Android\projects\myproj1\src>  se generó el archivo “main.prg”

#include "hdroidgui.ch"

FUNCTION HDroidMain

   RETURN NIL

Es el archivo en el que incluiremos nuestro código para la aplicación.

Guía de Inicio HDroidGUI

Based in HDROIDGUI SETUP TUTORIAL
http://www.hmgforum.com/viewtopic.php?f=35&t=4229&hilit=hdroidgui

1) Download Java Development Kit (JDK) version 7 for Windows (if you have other version installed, please uninstall first):

http://www.oracle.com/technetwork/es/java/javase/downloads/jdk7-downloads-1880260.html 

2015-03-27_110459

2015-03-27_110601

2) Run it and accept suggested install location (at the date of this post, it is: C:\Program Files\java\jdk1.7.0_75. It will change according version number) .

3) Go to: https://developer.android.com/sdk/index.html (‘SDK Tools Only’ section, near the end of the page) and download Windows version.

2015-03-27_111754

2015-03-27_112228

 

4) Create the folder tree: c:\Android\sdk and install Android SDK there.

2015-03-27_113035 2015-03-27_113115 2015-03-27_113151 2015-03-27_113232

 

5) Run C:\Android\sdk\SDK Manager.exe and follow these directions found in android.com:

2015-03-27_113744

 

As a minimum when setting up the Android SDK, you should download the latest tools and Android platform:

Open the Tools directory and select:
Android SDK Tools
Android SDK Platform-tools
Android SDK Build-tools (highest version)

Open the first Android X.X folder (the latest version) and select:
SDK Platform
A system image for the emulator, such as
ARM EABI v7a System Image

6) Go to https://developer.android.com/tools/sdk/ndk/index.html and download Android NDK for Windows release 10d (at the time of this post) and extract in C:\Android\android-ndk-r10d

2015-03-27_114429
7) Go to https://github.com/alkresin/HDroidGUI and click on ‘Download ZIP’. Unzip on C:\Android\projects\HDroidGUI

2015-03-27_115050

 

8) Edit the file C:\Android\projects\HDroidGUI\setenv.bat and change paths according to the location of the tools you’ve installed. With the versions installed at the time of this post, it should look as this:

@set ANDROID_HOME=c:\Android\sdk
@set BUILD_TOOLS=%ANDROID_HOME%\build-tools\21.1.2
@set NDK_HOME=c:\Android\android-ndk-r10d
@set JAVA_HOME=c:\Program Files (x86)\Java\jdk1.7.0_75

@set ADB=%ANDROID_HOME%\platform-tools\adb.exe
@set ANDROID_JAR=%ANDROID_HOME%/platforms/android-21/android.jar

@set HRB_BIN=c:\hb32\bin
@set HRB_INC=c:\hb32\include

c:\Android\projects\HDroidGUI\comp.bat

@call setenv

call "%JAVA_HOME%/bin/javac" -d libs -cp %ANDROID_JAR% -sourcepath src src/su/harbour/hDroidGUI/*.java
@if errorlevel 1 goto end

@rem jar cvf hdroidgui.jar -C libs .
:end
@pause

Tips:

– Please, be careful: Path names changes with tools versions!
– JAVA_HOME could be different according your Windows version and language. Please, check it.
– I have Harbour installed at c:\hb32. If that is not your path, please change it as needed. If you do not have Harbour installed, please check it.

Download from:
http://sourceforge.net/projects/harbour-project/files/latest/download?source=files
and unzip at c:\hb32

9) Build HDROIDGUI: C:\Android\projects\HDroidGUI\BuildAll.bat

2015-03-27_115910

 

10) Now, we will download a sample project called HDCALCUL. Go to https://github.com/alkresin/hdcalcul and click on ‘Download ZIP’. Unzip on c:\Android\projects\hdcalcul

View c:\Android\projects\hdcalcul\setenv.bat

@set HDROIDGUI=\android\projects\hdroidgui
@call %HDROIDGUI%/setenv

@set APPNAME=hdcalcul
@set PACKAGE=su.harbour.hdcalcul
@set PACKAGE_PATH=su\harbour\hdcalcul
@set MAIN_CLASS=MainActivity
@set DEV_HOME=%CD%

11) build the .apk running: c:\Android\projects\hdcalcul\build.bat. The .apk will be generated at c:\Android\projects\hdcalcul\bin.

@call setenv
@call clear

@%HRB_BIN%\harbour src\main.prg /q /i%HDROIDGUI%\src\include /i%HRB_INC% /ojni\

@if errorlevel 1 goto end

@set NDK_LIBS_OUT=lib

@set SRC_FILES=main.c
%NDK_HOME%\prebuilt\windows\bin\make.exe -f %NDK_HOME%/build/core/build-local.mk %* >a1.out 2>a2.out

@if exist lib\armeabi\libh4droid.so goto comp
@echo Errors while compiling C sources
@goto end

:comp
call %BUILD_TOOLS%/aapt.exe package -f -m -S res -J src -M AndroidManifest.xml -I %ANDROID_JAR%

@if errorlevel 1 goto end

@rem compile, convert class dex

@rem call %JAVA_HOME%/bin/javac -d obj -cp %ANDROID_JAR%;%HDROIDGUI%\hdroidgui.jar -sourcepath src src/%PACKAGE_PATH%/*.java
call "%JAVA_HOME%/bin/javac" -d obj -cp %ANDROID_JAR%;%HDROIDGUI%\libs -sourcepath src src/%PACKAGE_PATH%/*.java

@if errorlevel 1 goto end

call %BUILD_TOOLS%/dx.bat --dex --output=bin/classes.dex obj %HDROIDGUI%\libs

@if errorlevel 1 goto end

@rem create APK
call %BUILD_TOOLS%/aapt.exe package -f -M AndroidManifest.xml -S res -I %ANDROID_JAR% -F bin/%APPNAME%.unsigned.apk bin

call %BUILD_TOOLS%/aapt.exe add %DEV_HOME%/bin/%APPNAME%.unsigned.apk lib/armeabi/libharbour.so

@if errorlevel 1 goto end

call %BUILD_TOOLS%/aapt.exe add %DEV_HOME%/bin/%APPNAME%.unsigned.apk lib/armeabi/libh4droid.so

@rem sign APK
call "%JAVA_HOME%/bin/keytool" -genkey -v -keystore myrelease.keystore -alias key2 -keyalg RSA -keysize 2048 -validity 10000 -storepass calcpass -keypass calcpass -dname "CN=Alex K, O=Harbour, C=RU"

call "%JAVA_HOME%/bin/jarsigner" -sigalg SHA1withRSA -digestalg SHA1 -keystore myrelease.keystore -storepass calcpass -keypass calcpass -signedjar bin/%APPNAME%.signed.apk bin/%APPNAME%.unsigned.apk key2
%BUILD_TOOLS%/zipalign -v 4 bin/%APPNAME%.signed.apk bin/%APPNAME%.apk

:end
@pause

12) To test it, you only must to copy the .apk generated file to an Android device
and run it.

13) In my case I have synchronized the smarphone and notebook with the cloud, so I copy the .apk file from the notebook folder and automatically updated on the smartphone, same with screenshots of the smartphone are immediately in the notebook 🙂

Screenshot_2015-03-25-pag1

Herramientas infaltables en Linux

Habilitar todos los repositorios de Ubuntu,

Sistema/Administración/Gestor de paquetes Synaptic

Configuración/Repositorios -> Habilitar todos los repositorios

  • Equivalente Linux de Norton Commander para navegar entre los archivos en modo texto contamos con Midnight Commander es decir funciona en consola.

sudo -s

apt-get install mc

mc

  • Equivalente Linux de Total Commander para explorar archivos en modo gráfico, existe Gnome Commander.

sudo -s

apt-get install gnome-commander

Aplicaciones/Accesorios/GNOME Commander

También son recomendables Abiword equivalente a Word y Gnumeric equivalente a Excel.

gFTP un excelente cliente FTP, QTParted para gestión de particiones de disco duro.

Aplicaciones/Añadir y quitar…

Notas respecto a Linux

/*
* $Id: linux1st.txt 9918 2008-11-12 19:03:30Z vszakats $
*/

Linux primer

Ubuntu/Debian distro
——————–

Packages needed to cleanly build Harbour:
(Tested with Ubuntu 7.04 and 8.04)

For GTCRS terminal lib:
sudo apt-get install libncurses-dev

For GTSLN terminal lib:
sudo apt-get install libslang2-dev

For GTXWC terminal lib:
sudo apt-get install libx11-dev

For console mouse support in GTTRM, GTSLN and GTCRS:
sudo apt-get install libgpmg1-dev

For contrib/hbodbc lib:
sudo apt-get install unixodbc-dev

For contrib/hbcurl lib:
sudo apt-get install libcurl4-openssl-dev
or
sudo apt-get install libcurl4-gnutls-dev

For contrib/hbfbird lib:
sudo apt-get install libfirebird2.0-dev
or
sudo apt-get install firebird2.1-dev

For contrib/hbfimage lib:
sudo apt-get install libfreeimage-dev

For contrib/hbgd lib:
sudo apt-get install libgd2-xpm-dev
or
sudo apt-get install libgd-xpm-dev

For contrib/hbmysql lib:
sudo apt-get install libmysqlclient15-dev

For contrib/hbpgsql lib:
sudo apt-get install libpq-dev

For contrib/hbgf/hbgfgtk lib:
sudo apt-get install libgtk2.0-dev
sudo apt-get install libglib2.0-dev

For contrib/rddads lib:
Download and install ‘Advantage Client Engine API for Linux’ package
(f.e. aceapi-9.00.0.0.tar.gz)

For contrib/hbhpdf lib:
Download and ‘./configure’, ‘make install’ libharu
from http://libharu.org/

openSUSE distro

You’ll need these packages to compile certain contribs and optional
Harbour modules:

– xorg-x11-devel
– postgresql-devel
– gtk2-devel
– ncurses-devel
– slang-devel
– unixodbc-devel
– gd-devel
– libmysqlclient-devel

For contrib/rddads lib:
Download and install ‘Advantage Client Engine API for Linux’ package
(f.e. aceapi-9.00.0.0.tar.gz)

For contrib/libharu:
– Download and ‘./configure’, ‘make install’ libharu
from http://libharu.org/
– libpng-devel
– zlib-devel

Primer programa en Linux

/*
* http://www.mig2soft.com
* “hola.prg” Ejemplo básico Harbour para Linux
* Copyright 2008 MigSoft <fugaz_cl/at/mig2soft.com>
*/
ANNOUNCE HB_GTSYS
REQUEST HB_GT_STD_DEFAULT
PROCEDURE Main()
CLS
@ 0,0 SAY “Hola Mundo”
Inkey(0)
RETURN
En consola:
sudo -s
hbmk -static hola
./hola

Script para compilar en Linux

sudo -s

gedit bld.sh

Copiamos y pegamos lo siguiente :

#!/bin/sh

if [ -z “$HB_PREF” ]; then export HB_PREF=hb; fi
if [ -z “$HB_ARCHITECTURE” ]; then export HB_ARCHITECTURE=w32; fi
if [ -z “$HB_GPM_MOUSE” ]; then export HB_GPM_MOUSE=no; fi
if [ -z “$HB_COMPILER” ]; then export HB_COMPILER=mingw32; fi
if [ -z “$HB_GT_LIB” ]; then export HB_GT_LIB=gtwin; fi
if [ -z “$HB_BIN_INSTALL” ]; then export HB_BIN_INSTALL=/harbour/bin/; fi
if [ -z “$HB_LIB_INSTALL” ]; then export HB_LIB_INSTALL=/harbour/lib/; fi
if [ -z “$HB_INC_INSTALL” ]; then export HB_INC_INSTALL=/harbour/include/; fi

LIBFILES=”-Wl,–start-group “

LIBFILES=”$LIBFILES -lhbdebug -lhbvm -lhbrtl -lhbrdd -lhbrtl -lhbvm

-lhbmacro -lhbpp -lhblang -lhbcpage -lhbcommon -lrddntx -lrddcdx

-lrddfpt -lhbsix -lhbhsx “

if [ $HB_COMPILER = mingw32 ]; then
LIBFILES=”$LIBFILES -lgtwin -lgtgui “
fi

if [ $HB_GT_LIB = gtcrs ]; then
LIBFILES=”$LIBFILES -lgtcrs -lncurses “
fi

if [ $HB_GT_LIB = gtsln ]; then
LIBFILES=”$LIBFILES -lgtsln -lslang “
fi

LIBFILES=”$LIBFILES -Wl,–end-group “

if [ $HB_COMPILER = mingw32 ]; then
CFLAGS=”-W -Wall -O2 -mms-bitfields -mwindows -mno-cygwin “
LIBFILES=”$LIBFILES -lm -luser32 -lwinspool -lole32 -loleaut32

-luuid -lgdi32 -lcomctl32 -lcomdlg32 -lodbc32 -lwininet -lwsock32″
else
CFLAGS=”-W -Wall -O2″
fi

$HB_BIN_INSTALL/harbour -b -a -m -n -w -I$HB_INC_INSTALL $1

gcc $1.c -o $1 $CFLAGS -L$HB_LIB_INSTALL

-I$HB_INC_INSTALL $LIBFILES `pkg-config –cflags gtk+-2.0`

`pkg-config –libs gtk+-2.0 libglade-2.0`

rm -f $1.c
rm -f $1.o

./$1

Guardamos como bld.sh

en consola escribimos

chmod +x bld.sh

para compilar nuestro ejemplo

./bld.sh hola

en Linux | 253 Palabras