Oppure

Loading
21/11 18:30
Basso Livello
Sto sperimentando l'ambiente di sviluppo per applicazioni android B4A come consigliayo da Carlo. Ho eseguito l'applicazione in debug, volevo provare a compilare il programma e portarmi l'eseguibile direttamente nel cellulare, ma con le opzioni di compilazione che ho provato non mi ha creato l'eseguibile!

Nella guida b4a arrivano fino al test in debug ma non spiegano come portare l'app nel cellulare definitivamente.

Qualche dritta? Ho fatto qualche ricerca nel sito di b4a ma non ho trovato la risposta.
Se ci fosse la Silicon Valley in Italia, sarebbe capitanata da Barbara D'Urso.
21/11 22:02
Carlo
Postato originariamente da Basso Livello:

Sto sperimentando l'ambiente di sviluppo per applicazioni android B4A come consigliayo da Carlo. Ho eseguito l'applicazione in debug, volevo provare a compilare il programma e portarmi l'eseguibile direttamente nel cellulare, ma con le opzioni di compilazione che ho provato non mi ha creato l'eseguibile!

Nella guida b4a arrivano fino al test in debug ma non spiegano come portare l'app nel cellulare definitivamente.

Qualche dritta? Ho fatto qualche ricerca nel sito di b4a ma non ho trovato la risposta.

L'eseguibile è un'apk che si trova nella cartella ....\NomeApplicazione\Objects\
L'apk la puoi copiare via usb, pennetta, bluetooth, wi-fi, in una cartella del cellulare e poi mandare in esecuzione, ti verrà richiesto se installare apk non sicure, devi dare l'autorizazione in impostazioni, perché l'apk non proviene da PlayStore.
L'apk puoi inviartela anche con whatsapp web.

Per evitare tutto questo, il cellulare deve essere collegato via USB al PC, tutti i driver devono essere installati, win7/10 lo fa in automatico.
Sul cellulare la modalità sviluppatore deve essere attivata e deve essere dato il consenso al collegamento con il PC.

Poi su B4A, devi usare il tasto connetti, se ti appare: "nessun dispositivo trovato ecc ecc" una delle precedenti operazioni non è stata eseguita correttamente. vedi foto allegata.

Se hai un cellulare "vecchio" di un brand non riconosciuto da Win, e non hai i driver nenche nel sito del produttore, nessun problema, B4A si può usare in debug con il cellulare connesso via Wi-Fi (ti darò info se ti occorrono)

Una volta connesso non devi scegliere nessuna opzione, B4A compila in codice nativo Java, firma il pacchetto, lo invia al cellulare, lo installa e lo manda in esecuzione, tutto in automatico, non devi fare nulla solo leggere la progressione che avanza speditamente.
Se sei in Debug, puoi inserire i Breakpoints e l'applicazione avanzerà passo passo vedendo il risultato sul cellulare, sul cellulare vedrai anche la riga Java in esecuzione, e sul log di B4A potrai esplorare i valori delle variabili, insomma il controllo è totale, B4A fa veramente bene il suo lavoro.
Ultima modifica effettuata da Carlo 21/11 22:28
in programmazione tutto è permesso
21/11 22:46
Carlo
C'è una sola cosa che mi ha fatto pensare di essere "tonto", il nome del package.
Su [Progetto/Configura Ambiente di Compilazione] o semplicemente Ctrl+B, devi inserire il nome del programma, e se tralasci il punto, non funziona nulla, senza una spiegazione chiara. Nella foto allegata il nome: "Android.Linee" genererà un'apk di nome Linee.apk
Ultima modifica effettuata da Carlo 22/11 1:13
in programmazione tutto è permesso
22/11 7:03
Basso Livello
Ho tre opzioni di compilazione nel menu "Progetto":

1) Compila ed esegui [genera un file *_RAPID_DEBUG.apk e lo esegue sul cellulare collegato, poi quando stoppo il debug sparisce l'apk]

2) compila ed esegui (background) [esegue l'applicazione sul cellulare senza mostrare il file .apk sul PC]

3) compila come libreria [non utilizzabile con i moduli Main e starter, serve per creare librerie da utilizzare nei vari progetti]

Nessuna di queste opzioni mi crea il file PrimaApp.apk (il nome del package è b4a.PrimaApp)

Ho pensato che potrei copiare il file PrimaApp_RAPID_DEBUG.apk finché il telefono è collegato, ma non mi sembra la soluzione più intelligente
Se ci fosse la Silicon Valley in Italia, sarebbe capitanata da Barbara D'Urso.
22/11 14:54
Carlo
Forse abbiamo versioni diverse la mia è: 8.80

Uso Compila ed esegui, o F5 (come in VB6/VB.Net), o il triangolino esegui

Se sono in Debug una volta terminato il Debug nel pc trovo l'apk in: ...\PrimaApp\Object\PrimaApp_RAPID_DEBUG.apk e non scompare dal PC, neanche se sconnetto il cellulare.
Nel cellulare l'app la trovo nel menù delle apk, all'ultima pagina all'ultima posizione.
Il nome sotto all'icona nel cellulare è quello che dai da codice, nell'esempio: MiaPrimaApk
#Region Module Attributes
	#ApplicationLabel: MiaPrimaApk
	#VersionCode: 1
	#VersionName: 
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region


Se sono in Release, una volta compilato, nel pc trovo l'apk in: ...\PrimaApp\Object\PrimaApp.apk e PrimaApp_RAPID_DEBUG.apk scompare dal PC

Nel cellulare come sopra. :k:

Per distribuire PrimaApp.apk, dopo che l'hai copiata nel cellulare, WhatsApp è il sistema più indicato.
Per metterla nel PlayStore, ti devi accreditare come sviluppatore, sottostando alle policy di Google.
Per metterla in Amazon AppStore, è tutto più facile in developer.amazon.com, la limitazione è che non puoi mettere un'app che contiene dei link protetti da copyright: Youtube, Facebook ecc ecc.


Ultima modifica effettuata da Carlo 22/11 21:42
in programmazione tutto è permesso
28/11 9:47
Basso Livello
Ecco la mia prima app, ho cambiato l'estensione del file da .apk a .zip, per caricarla, é una versione di hello world "rivisitata". Spero di produrre qualcosa di più interessante e meno "offensivo" :rotfl:
Se ci fosse la Silicon Valley in Italia, sarebbe capitanata da Barbara D'Urso.
28/11 10:55
Carlo
Postato originariamente da Basso Livello:

Ecco la mia prima app, ho cambiato l'estensione del file da .apk a .zip, per caricarla, é una versione di hello world "rivisitata". Spero di produrre qualcosa di più interessante e meno "offensivo" :rotfl:

Spero che B4A ti piaccia, il codice seguente l'ho scritto in VB6 anni fa e modificato l'anno scorso per B4A in 10 minuti, se tocchi lo schermo appaiono delle info, se tocchi le info l'animazione va in pausa:
#Region Module Attributes
	#ApplicationLabel: Linee by carlo ©2019
	#VersionCode: 1
	#VersionName: 
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes 
	#FullScreen: True
	#IncludeTitle: false
#End Region

Sub Process_Globals
	Dim Timer1 As Timer
End Sub

Sub Globals
	Dim CanvasGraph As Canvas
	Dim ImageGraph As ImageView
	Dim lblTitle As Label

	Dim Posizione As Float

        Dim Cont(7, 3) As Int   
        Dim RigaFin As Float
	Dim RigaFinInc As Float
	Dim ColFin As Float
	Dim ColFinInc As Float
	Dim RigaIn As Float       
	Dim RigaInInc As Float
	Dim ColIn As Float
	Dim ColInInc As Float
        Dim memo(6, 100) As Float
	Dim rosso As Short = 255
	Dim verde As Short= 255
	Dim blu As Short= 255
	
	Dim RigaFin2 As Float
	Dim RigaFinInc2 As Float
	Dim ColFin2 As Float
	Dim ColFinInc2 As Float
	Dim RigaIn2 As Float       
	Dim RigaInInc2 As Float
	Dim ColIn2 As Float
	Dim ColInInc2 As Float
        Dim memo2(6, 100) As Float

	Dim RigaMax As Float
	Dim ColMax As Float
	Dim RigheVisibili As Float
	Dim RigaAttuale As Float
	Dim riscrivi As Float
        Dim i As Short = 0
        Dim n As Short = 0
End Sub

Sub Activity_Create(FirstTime As Boolean)
	
	ImageGraph.Initialize("ImageGraph")
	Activity.AddView(ImageGraph,0,0,100%x,100%y)
	
  ' sequenza di operazioni sui colori
	Cont(0,0)=-1
	Cont(0,1)= 0
	Cont(0,2)= 0 
	Cont(1,0)= 1
	Cont(1,1)=-1
	Cont(1,2)= 0
	Cont(2,0)= 0
	Cont(2,1)= 1
	Cont(2,2)=-1
	Cont(3,0)=-1
	Cont(3,1)=-1
	Cont(3,2)= 1
	Cont(4,0)= 1
	Cont(4,1)= 0
	Cont(4,2)=-1 
	Cont(5,0)=-1
	Cont(5,1)= 1
	Cont(5,2)= 0
	Cont(6,0)= 1
	Cont(6,1)= 0
	Cont(6,2)= 1
 
	RigheVisibili = 99
	ColFinInc = 6
	RigaFinInc = 6
	RigaInInc = 8
	ColInInc = 8
	RigaFin = 200
	ColIn = 100
	RigaIn = 0
	ColFin = 70
	
	ColFinInc2 = 16
	RigaFinInc2 = 10
	RigaInInc2 = 18
	ColInInc2 = 14
	RigaFin2 = 500
	ColIn2 = 600
	RigaIn2 = 0
	ColFin2 = 70
    
	lblTitle.Initialize("lblTitle")
	lblTitle.Color = Colors.Transparent
	lblTitle.TextSize = 14
	lblTitle.TextColor = Colors.White
	lblTitle.Gravity = Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
	lblTitle.Text = ""
	lblTitle.Visible = False
	Activity.AddView(lblTitle, 0, 0, 100%x, 50dip)

	Timer1.Initialize("Timer1",40)
	Timer1.Enabled = True
End Sub

Sub Activity_Resume
	RigaMax = ImageGraph.Height 
	ColMax = ImageGraph.Width
	Drawing
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Drawing

	CanvasGraph.Initialize(ImageGraph)
	CanvasGraph.DrawColor(Colors.Black)
    
	'memo2 traccia anche righe scure, le disegno prima
        For riscrivi = RigaAttuale To RigaAttuale + RigheVisibili  ' scrivo tutte le righe memorizzate 
                Posizione = riscrivi Mod RigheVisibili + 1
		CanvasGraph.DrawLine(memo2(1, Posizione), memo2(2, Posizione), memo2(3, Posizione), memo2(4, Posizione), memo2(5, Posizione) ,1.5dip)
	Next 
	
	'memo non traccia righe scure le disegno sopra alle righe di memo2 
	For riscrivi = RigaAttuale To RigaAttuale + RigheVisibili  ' scrivo tutte le righe memorizzate 
                Posizione = riscrivi Mod RigheVisibili + 1
		CanvasGraph.DrawLine(memo(1, Posizione), memo(2, Posizione), memo(3, Posizione), memo(4, Posizione), memo(5, Posizione) ,1.5dip)
	Next 

End Sub

Private Sub Timer1_Tick

  ' preparo le coordinate delle linee

	RigaAttuale = RigaAttuale + 1
	If RigaAttuale > RigheVisibili Then RigaAttuale = 1
   
	Posizione = RigaAttuale Mod RigheVisibili + 1 ' es: se le righe visibili sono 40, la posizione dell'indice della matrice
	' deve andare sempre da 1 a 40 ma la RigaAttuale cambia da 1 a 40 e quando è 1
	' tutto e ok, quando è 2 ai arriva a 41 che deve essere trasformato in 1 come un anello
	' infatti:
	' ..... omiss
	' 37 mod 41 = 37
	' 38 mod 41 = 38
	' 39 mod 41 = 39
	' 40 mod 41 = 40
	' 41 mod 41 = 0
	' 42 mod 41 = 1
	' 43 mod 41 = 2
	' 44 mod 41 = 3
	' ecc, ecc.
	' magia di mod che da il resto della divisione. Così si può incrementare
	' una variabile in modo lineare fino al massimo valore consentito ed avere
	' come risultato dei valori sempre compresi nel range voluto
	' con la programmazione occorrerebbero 1 variabile e 2 iff

	' due sono i punti tra i quali si costruisce la riga che viaggiano rimbalzando sui bordi dello schermo  --------------
	' i bordi sotto e destra, sono contenuti nelle variabili RigaMax e ColMax, aggiornate da Form_Resize

	RigaFin = RigaFin + RigaFinInc ' incrementa la riga (Y)
	ColFin = ColFin + ColFinInc ' incrementa la colonna (X)
	If RigaFin < 0 Then RigaFinInc = Rnd(12,20) ' tocca a destra l'incremento random diventa positivo
	If RigaFin > RigaMax Then RigaFinInc = Rnd(12,20) * -1 ' tocca a sinistra l'incremento random diventa negativo
	If ColFin > ColMax Then ColFinInc = Rnd(12,20) * -1 ' tocca giù l'incremento random diventa negativo
	If ColFin < 0 Then ColFinInc = Rnd(12,20) ' tocca su l'incremento random diventa positivo

	RigaIn = RigaIn + RigaInInc ' come sopra per l'altro punto
	ColIn = ColIn + ColInInc
	If RigaIn > RigaMax Then RigaInInc = Rnd(12,20) * -1
	If RigaIn < 0 Then RigaInInc = Rnd(12,20)
	If ColIn > ColMax Then ColInInc = Rnd(12,20) * -1
	If ColIn < 0 Then ColInInc = Rnd(12,20)
	'--------------------------------------------------------------------------------------------------------------------

	' memorizzo le coordinate dei 2 punti tra i quali disegnerò la riga
	memo(1, RigaAttuale) = ColIn
	memo(2, RigaAttuale) = RigaIn
	memo(3, RigaAttuale) = ColFin
	memo(4, RigaAttuale) = RigaFin
	
	
	
	RigaFin2 = RigaFin2 + RigaFinInc2 ' incrementa la riga (Y)
	ColFin2 = ColFin2 + ColFinInc2 ' incrementa la colonna (X)
	If RigaFin2 < 0 Then RigaFinInc2 = Rnd(8,18) ' tocca a destra l'incremento random diventa positivo
	If RigaFin2 > RigaMax Then RigaFinInc2 = Rnd(8,18) * -1 ' tocca a sinistra l'incremento random diventa negativo
	If ColFin2 > ColMax Then ColFinInc2 = Rnd(8,18) * -1 ' tocca giù l'incremento random diventa negativo
	If ColFin2 < 0 Then ColFinInc2 = Rnd(8,18) ' tocca su l'incremento random diventa positivo

	RigaIn2 = RigaIn2 + RigaInInc2 ' come sopra per l'altro punto
	ColIn2 = ColIn2 + ColInInc2
	If RigaIn2 > RigaMax Then RigaInInc2 = Rnd(8,18) * -1
	If RigaIn2 < 0 Then RigaInInc2 = Rnd(8,18)
	If ColIn2 > ColMax Then ColInInc2 = Rnd(8,18) * -1
	If ColIn2 < 0 Then ColInInc2 = Rnd(8,18)
	'--------------------------------------------------------------------------------------------------------------------

	' memo2rizzo le coordinate dei 2 punti tra i quali disegnerò la riga
	memo2(1, RigaAttuale) = ColIn2
	memo2(2, RigaAttuale) = RigaIn2
	memo2(3, RigaAttuale) = ColFin2
	memo2(4, RigaAttuale) = RigaFin2
	
	
	
	' i colori
	If i > 254 Then ' ciclo da 255
        i = 0 : n = n + 1
        If n > 6 Then n = 0 ' ciclo da 6
    End If
    i = i + 1

    ' il colore da incrementare/decrementare è deciso in matrice, si parte con R G e B a 255
    rosso = rosso + Cont(n, 0)
    verde = verde + Cont(n, 1)
    blu = blu + Cont(n, 2)
    memo(5, RigaAttuale) = Colors.ARGB(255,rosso,verde,blu)
    memo2(5, RigaAttuale) = Colors.ARGB(200,blu,rosso,verde)
	
    If lblTitle.Visible Then
	 	lblTitle.Text = Application.LabelName & Chr(10) &" R" & rosso & " G" & verde & " B" & blu & " - R" & blu & " G" & rosso & " B" & verde
    End If
	
    Drawing
	
End Sub

Sub ImageGraph_click()
	If lblTitle.Visible Then
		lblTitle.SetVisibleAnimated(500,False)
	Else
		lblTitle.SetVisibleAnimated(500,True)
	End If
End Sub

Sub lblTitle_click
	If Timer1.Enabled Then
		Timer1.enabled = False
	Else
		Timer1.Enabled = True
	End If
End Sub
Ultima modifica effettuata da Carlo 28/11 19:17
in programmazione tutto è permesso
28/11 11:24
Basso Livello
Ok grazie, la userò come spunto, comunque per ottenere il file .apk ho cambiato l'opzione da "debug" a "release" e in questo modo mi ha mantenuto l'app sul telefono e anche il file .apk sul PC, che ho provveduto a girare a qualche conoscente :k:
Se ci fosse la Silicon Valley in Italia, sarebbe capitanata da Barbara D'Urso.