Un paio di premesse:
1 - le B4XPages sono molto più utili se devi sviluppare con B4A e B4I, piuttosto che per uno dei due e B4J, per l'evidente motivo che i primi due sono per dispositivi mobile mentre il terzo è per desktop;
2 - per sviluppare per più piattaforme, in particolare come nel tuo caso, non è
indispensabile che il progetto sia di tipo B4XPages; è importante che utilizzi B4XView e XUI.
Le linee di codice sorgente in pratica non cambiano, nel senso che parole-chiave, operatori, etc. sono identici, è lo stesso linguaggio.
Per la grafica, appunto anziché usare le View native, specifiche di B4A o B4J, userai come tipo base B4XView e, quando necessario, lo convertirai temporaneamente nel tipo nativo.
Per cose particolari e specifiche di un linguaggio rispetto all'altro, si usa la compilazione condizionale:
#IF B4A
' compila questo...
'
#ELSE IF B4J
' compila quest'altro...
'
#ELSE ' evidentemente è B4I
' compila quest'altro ancora
'
#END IF