D for Android beta

Joakim via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Fri Jun 2 03:12:27 PDT 2017


On Friday, 2 June 2017 at 09:39:46 UTC, Petar Kirov [ZombineDev] 
wrote:
> On Friday, 2 June 2017 at 08:58:01 UTC, Joakim wrote:
>> On Friday, 2 June 2017 at 08:36:49 UTC, DuĊĦan Pavkov wrote:
>>> On Thursday, 1 June 2017 at 19:31:28 UTC, Joakim wrote:
>>>> The beta release of ldc 1.3, the llvm-based D compiler, is 
>>>> now out:
>>>>
>>>> https://github.com/joakim-noah/android/releases
>>>>
>>>> It is accompanied by a non-trivial sample app from the 
>>>> Android NDK, ported from C++ to about 1.2 klocs of D: the 
>>>> classic Utah Teapot 
>>>> (https://en.wikipedia.org/wiki/Utah_teapot), updated with 
>>>> mobile touch controls.  This app also demonstrates calling 
>>>> Java functions from your D code through JNI, though most of 
>>>> it is written in D.
>>>>
>>>> There are two builds of ldc, a cross-compiler that you can 
>>>> use from a linux/x64 shell to compile to Android/ARM, and a 
>>>> native compiler that you can run on your Android device 
>>>> itself.  As I pointed out last year, not only is ldc a large 
>>>> mixed D/C++ codebase that just worked on ARM, but it is 
>>>> possible to build arbitrarily large Android apps on your 
>>>> Android device itself, a first for any mobile platform:
>>>>
>>>> http://forum.dlang.org/thread/ovkhtsdzlfzqrqneolyv@forum.dlang.org
>>>>
>>>> This is the way the next generation of coders will get into 
>>>> coding, by tinkering with their Android devices like we did 
>>>> with Macs and PCs decades ago, and D is one the few 
>>>> languages that is already there.
>>>>
>>>> I will write up instructions on how to write an Android app 
>>>> in D _on_ your Android device by using ldc and the Termux 
>>>> app, and get ldc into the Termux packages, a package 
>>>> repository for Android:
>>>>
>>>> https://play.google.com/store/apps/details?id=com.termux&hl=en
>>>
>>> Hello,
>>>
>>> Thanks for the post. I have tried to run apk on 2 devices:
>>> 1. LG-E440 phone with Android 4.1.2
>>> 2. Orange Pi Lite (development board with Allwinner H3 CPU) 
>>> Android 4.4.2
>>>
>>> On both devices there was only gray rectangle with "Teapot" 
>>> notification at the bottom for about a sec and then in upper 
>>> left corner the FPS info (around 60 on both devices), but 
>>> without any graphic. I have tried taping, dragging etc.
>>>
>>> Are Android versions a problem or it could be something else?
>>>
>>> Thanks in advance.
>>
>> I'd guess that's the issue, as I haven't tested against those 
>> older versions of Android and this app links against Android 
>> API 21, ie 5.0 Lollipop:
>>
>> https://github.com/joakim-noah/android/blob/master/samples/Teapot/build-apk#L17
>>
>> I'm pretty sure it'd work for your older Android versions if 
>> built slightly differently, as I used to support back to 
>> Android API 9 until a couple months ago:
>>
>> https://gist.github.com/joakim-noah/f475b0be37b3834b4e50d68996b6ee1d#file-ldc_1-1-0_android_arm-L3438
>>
>> It can be still made to so but I set API 21 as the minimum, 
>> because anything older has been declining for some time now:
>>
>> http://blog.davidecoppola.com/2016/12/android-version-distribution-history-visualization-2012-2016/
>
> Just FYI, I have the same issue with Android 6.0.1.

Hmm, is that the 64-bit Xiaomi device you mentioned in the github 
issues just now?  My guess there would be that it's because ldc 
only supports 32-bit Android/ARM devices right now, and 64-bit 
devices like Xiaomi probably don't run 32-bit native Android 
libraries in their apps, though I don't know that for sure.  I 
just tried installing the teapot app on another 32-bit 6.0.1 
phone that I'd never tried before, worked fine.

This is not an issue for Java, because the Android runtime 
compiles Java bytecode to native code _after_ the app is 
downloaded, but other languages have to provide pre-compiled 
libraries for each CPU architecture.  Not a big deal as there are 
only really two in wide deployment, 32-bit and 64-bit ARM, with 
the vast majority 32-bit right now.

Perhaps you can help us get on 64-bit ARM, as you mentioned in 
the github issues.


More information about the Digitalmars-d-announce mailing list