Building the sample for Android on Linux
-
Install .NET 9 SDK. https://dotnet.microsoft.com/en-us/download/dotnet/9.0
-
Ensure
dotnet --versionworks. -
Install Android NDK. https://developer.android.com/ndk/downloads
-
Set environment variable
ANDROID_NDK_HOMEto the path of the NDK installation. ie.nano ~/.bashrc, add lineexport ANDROID_NDK_HOME="$HOME/dev/android-ndk-r27". -
Clone beyondnet. ie.
git clone https://github.com/royalapplications/beyondnet.git. -
cd to
beyondnet/Generator/Beyond.NET.CodeGenerator.CLI. -
Run
./publish_linux_arm64or./publish_linux_x64depending on the host platform. -
Add a symlink to
beyondnetgenso that it's on thePATH. ie.sudo ln -s ~/dev/beyondnet/Generator/Beyond.NET.CodeGenerator.CLI/bin/Release/net9.0/linux-arm64/publish/beyondnetgen /usr/local/bin/beyondnetgen. -
Check if invoking
beyondnetgenworks and shows usage info. -
cd to
beyondnet/Samples/Beyond.NET.Sample.Managed. -
Run
./publish_managed. -
cd to
beyondnet/Samples. -
Run
beyondnetgen Beyond.NET.Sample_Config.json. -
cd to
beyondnet/Samples/Beyond.NET.Sample.Native. -
Run
./publish_android_arm64. NOTE: It appears that the Android NDK is currently unavailable for ARM64-based Linux machines and at least for me, the compilation fails within Parallels with the following errorEXEC : rosetta error : failed to open elf at /lib64/ld-linux-x86-64.so.2 [/home/fx/dev/beyondnet/Samples/Beyond.NET.Sample.Native/Beyond.NET.Sample.Native.csproj]. -
Open
beyondnet/Samples/Beyond.NET.Sample.Androidin Android Studio and try to build/run OR to build from the command line, cd tobeyondnet/Samples/Beyond.NET.Sample.Androidand run./build.sh.
NOTE: Targeting Android 15 does not work at the moment because JNA hasn't yet added support for 16 KB page size on Android. See https://github.com/java-native-access/jna/issues/1618
Using the Android 14 SDK is fine though.
I walked through the process and everything worked fine on my Debian 12 machine (Kernel 6.9.8-amd64). Only issue I have is that no object from beyondnet can be found in the MainActivity.kt, e.g.: System_Guid, even though it can be found in the Generated_Kotlin.kt file :thinking:
@eiabea Yup, forgot to document this but you need to increase the max file size of Android Studio/IntelliJ: https://stackoverflow.com/a/23058324/1025706
Btw I think I increased it to something like 500MB and everything's fine. That's on an M2 Ultra though so your mileage may vary. 😉
@eiabea FYI: Ultimately (once the code generator reaches a certain level) I would like to add automatic build support just like what we have for Swift already. So that instead of including the generated Kotlin code file and the native binary, it would be just a single pre-compiled library that includes both parts. Once we have that, there'll be no more need for the IntelliJ file size tweak.
@eiabea Yup, forgot to document this but you need to increase the max file size of Android Studio/IntelliJ: https://stackoverflow.com/a/23058324/1025706
Btw I think I increased it to something like 500MB and everything's fine. That's on an M2 Ultra though so your mileage may vary. 😉
Thanks, I already was that desperate to set this value, but now the IDE seems stuck :sweat_smile:
@eiabea Really?! The file isn't that huge so maybe try something like 50MB?
@eiabea I just checked. On my MacBook Air M2 I set it to 999999 (KB) so roughly 1GB and have no issues whatsoever. Since the actual file is only around 7MB you can probably get away with a much lower value for quite a while. If that changes anything about performance on your machine, I don't know of course.
I know you want to see my good old Thinkpad in flames @lemonmojo, but it seems like there is some kind of other issue :thinking:
Looks like the Generated_Kotlin.kt never gets compiled, even though i get some warnings
@eiabea After updating to .NET 9 RC1 and recompiling the generator, don't forget to update your symlink to beyondnetgen.
JNA has now been updated to support 16KB page size. So targeting Android 15 should work now.