  Cross-platform development solutions can help to make software available on
different devices and platforms. But these are normally restricted to
preconfigured platforms and consider that each individual solution is equal or
similar to each other. As a result, developers have to resort to native
development and build individual solutions, one for each device/platform, that
cooperate to deliver the desired global functionality. This article presents an
approach that takes advantage of existing solutions and have support for
extending and including new platforms, and distributing functionality across
devices. The approach is based on a general-purpose language that raises the
abstraction level in order to keep the software free from platform details.
Automatic transformations produce executable code that can be properly divided
and deployed separately into different platforms. The proposed approach was
evaluated in four ways. In the first evaluation, an existing cross-platform
system was recreated using the approach. The second and third evaluations was
conducted with expert and novice developers, who tested the approach in
practice. The fourth evaluation introduced support for cross-platform testing.
Results have brought evidence supporting the following main contributions: use
of a single environment, the ability to reuse similar concepts between
platforms and the potential to reduce costs.
