How to make Android App Bundle ( aab ) file from apk?

I’ve tried grabbing the latest lime and OpenFL–

Lime Command-Line Tools (7.7.0)
OpenFL Command-Line Tools (8.2.2-LpgCLS)

– but I’m getting this:

Error: OpenFL 8.2.2 is not compatible with Lime 7.7.0 (version 6.4.* is required)

Is there some toolchain with versions of these that are compatible and that support arm64?

You can try adding -Ddisable-version-check to allow OpenFL 8.2 to build with Lime 7.7 (I’m not sure if it would be compatible or not?) or changes from the Lime tools could be backported for an older release

No luck, unfortunately – doesn’t look like lime 7.7.0 and OpenFL 8.2.2-LphCLS are compatible. But from what I can tell, it’s due to something missing on the lime side that OpenFL now checks for…?

C:\HaxeToolkit\haxe\haxelib run lime build “project.xml” android -64 -Ddisable-version-check C:/HaxeToolkit/haxe/lib/openfl/8,2,2/src/openfl/display/Stage.hx:7: characters 7-25 : Type not found : lime.app.Preloader

If I run through Stage.hx and simply comment out what’s missing, it looks like there are three packages OpenFL can’t find:

lime.app.Preloader;
lime.graphics.Renderer;
lime.ui.Mouse in LimeMouse;

And then, of course, past that, other files break (e.g. DisplayObject.hx can’t find lime.graphics.utils.ImageCanvasUtil), which is to be expected…

Have you tried a newer OpenFL version with your app?

I thought I was using the latest but I wasn’t – .dev specified 8.2.2 and .current specified the latest (8.9.6), so I had to make sure I was using .current. Thanks for the catch.

With 8.9.6, it gets farther.

Link: libApplicationMain-v7.so
Error: Source path “C:/HaxeToolkit/haxe/lib/lime/7,7,0/ndll/Android/liblime-x86_64.so” does not exist

In that directory, I have a liblime-64.so among others, though. I’m not sure why it’s trying to include an x86_64, since I’ve specified

<architecture name="arm64" if="android" />

and the output seems to verify that it’s using arm…?:

C:\HaxeToolkit\haxe\haxelib run lime build “project.xml” android -64
Creating C:/Users/greed/Documents/Temp/lst/builds/export-released/android/obj/obj/android-v7/__pch/haxe/hxcpp.h.gch…

Compiling group: haxe
arm-linux-androideabi-g++ -Iinclude --sysroot=C:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/platforms/android-16/arch-arm -IC:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include -IC:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/include -DHXCPP_ARMV7 -DHXCPP_VISIT_ALLOCS(haxe) -DHXCPP_API_LEVEL=331(haxe) -IC:/HaxeToolkit/haxe/lib/hxcpp/4,0,64/include -Iinclude -fpic -fvisibility=hidden -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-overflow -D_LINUX_STDDEF_H -Wno-psabi -DHXCPP_CPP11 -DHXCPP_ARMV7 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -fomit-frame-pointer -fexceptions -fno-strict-aliasing -finline-limit=10000 -DANDROID=ANDROID -DHX_ANDROID -DHXCPP_ANDROID_PLATFORM=16 -Wa,–noexecstack -O2 -DNDEBUG -c … tags=[haxe,static]

  • src/__ASSET__levels_dlc_5_tmx.cpp
  • src/openfl/system/SecurityDomain.cpp [haxe,release]

But the error leads me to this thread: Does openfl support 64-bit devices on Android?, though it also seems to deal with x86_64.

We don’t include x86_64 builds for Android in the Lime releases right now. Could someone using the dev version of Lime try lime rebuild android -64 and see if it works with the current version of HXCPP?

Works like a charm with hxcpp: [4.0.64]

In toying around, I think I’ve got a better understanding of what’s going on here:

From what I can tell, lime’s including -v7.so as it should… but it’s also trying to include -x86_64.so and it sounds like it shouldn’t be. Is my interpretation correct? Is that what it should be doing, or should we expect a different sort of behavior?

I’m currently running through building the dev version of lime (branch ‘develop’) and will try that as well when I can.

Adding the 64-bit architecture will cause it to look for an “x86_64” binary but this is not built and included in the Haxelib distribution of Lime currently.

It sounds as if we just need a current HXCPP and an update to our build server script to include this architecture for future releases but perhaps I’m wrong :slight_smile:

OK, I’m giving it another shot from scratch-ish. Forgive the long pastes but I’m trying to be thorough, I guess…? :upside_down_face:

Here’s trying it with lime 7.7.0. Version info for haxelib and openfl:

PS C:\Users\greed\Files\Personal\Software\Games\lst\haxe> haxelib version
3.3.0 (a494d8be523e26fcf875e2c33915808dc221e17a)
PS C:\Users\greed\Files\Personal\Software\Games\lst\haxe> openfl --version

 .d88 88b.                             888888b 888
d88P" "Y88b                            888     888
888     888                            888     888
888     888 88888b.   .d88b.  88888b.  8888888 888
888     888 888 "88b d8P  Y8b 888 "88b 888     888
888     888 888  888 88888888 888  888 888     888
Y88b. .d88P 888 d88P Y8b.     888  888 888     888
 "Y88 88P"  88888P"   "Y8888  888  888 888     "Y888P
            888
            888

OpenFL Command-Line Tools (8.9.6-LpgCLS)
Use openfl setup to configure platforms or openfl help for more commands


PS C:\Users\greed\Files\Personal\Software\Games\lst\haxe> lime --version

_/\\\\\\______________________________________________
_\////\\\______________________________________________
_____\/\\\_____/\\\_____________________________________
______\/\\\____\///_____/\\\\\__/\\\\\_______/\\\\\\\\___
_______\/\\\_____/\\\__/\\\///\\\\\///\\\___/\\\/////\\\__
________\/\\\____\/\\\_\/\\\_\//\\\__\/\\\__/\\\\\\\\\\\___
_________\/\\\____\/\\\_\/\\\__\/\\\__\/\\\_\//\\///////____
________/\\\\\\\\\_\/\\\_\/\\\__\/\\\__\/\\\__\//\\\\\\\\\\__
________\/////////__\///__\///___\///___\///____\//////////___

Lime Command-Line Tools (7.7.0)
Use lime setup to configure platforms or lime help for more commands

And then, running lime 7.7.0:

PS C:\Users\greed\Files\Personal\Software\Games\lst\haxe> C:\HaxeToolkit\haxe\haxelib run lime build "project.xml" android -64
Creating C:/Users/greed/Documents/Temp/lst/builds/export-released/android/obj/obj/android-v7/__pch/haxe/hxcpp.h.gch...

Compiling group: haxe
arm-linux-androideabi-g++ -Iinclude --sysroot=C:\\Users\\greed\\AppData\\Local\\Android\\ndk\\android-ndk-r10e/platforms/android-16/arch-arm -IC:\\Users\\greed\\AppData\\Local\\Android\\ndk\\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include -IC:\\Users\\greed\\AppData\\Local\\Android\\ndk\\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/include -DHXCPP_ARMV7 -DHXCPP_VISIT_ALLOCS(haxe) -DHXCPP_API_LEVEL=331(haxe) -IC:/HaxeToolkit/haxe/lib/hxcpp/4,0,64/include -Iinclude -fpic -fvisibility=hidden -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-overflow -D_LINUX_STDDEF_H  -Wno-psabi -DHXCPP_CPP11 -DHXCPP_ARMV7 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp -fomit-frame-pointer -fexceptions -fno-strict-aliasing -finline-limit=10000 -DANDROID=ANDROID -DHX_ANDROID -DHXCPP_ANDROID_PLATFORM=16 -Wa,--noexecstack -O2 -DNDEBUG -c ... tags=[haxe,static]
 - src/StateDOS.cpp
 - src/lime/utils/AssetCache.cpp  [haxe,release]
Link: libApplicationMain-v7.so
Error: Source path "C:/HaxeToolkit/haxe/lib/lime/7,7,0/ndll/Android/liblime-x86_64.so" does not exist

But when I try the version in the repo, I get:

PS C:\Users\greed\Files\Personal\Software\Games\lst\haxe> C:\HaxeToolkit\haxe\haxelib run lime build “project.xml” android -64
Error: Source path “C:/HaxeToolkit/haxe/lib/lime/lime/ndll/Android/liblime-v7.so” does not exist

It looks like I’m using the 4 Feb 2020 version from the repo:

image

Any ideas? Any other info that I can share or things that I can try that might be helpful?

Hey guys, any ideas?

Bump

Have you happened to figure this one out?

Did you rebuild lime ?

That would make sense. I tried all of the instructions in README.md. Started from scratch and essentially ran these:

git clone --recursive https://github.com/openfl/lime
haxelib dev lime lime
haxelib install format
lime rebuild windows

That built some ndll’s for Windows and Windows64 with no problem.

But lime rebuild android -64 doesn’t:

PS C:\HaxeToolkit\haxe\lib\lime\from-cmd> lime rebuild android -64
Compiling group: native-toolkit-openal
arm-linux-androideabi-g++ -Ilib/openal/Alc -Ilib/openal/build/ -Ilib/openal/common/ -Ilib/openal/include/ -Ilib/openal/OpenAL32/include/ -DAL_ALEXT_PROTOTYPES -D_LARGEFILE_SOURCE -D_LARGE_FILES -Ilib/sdl/include/ -Ilib/sdl/include/configs/default/ -DHAVE_SDL2 -fPIC -fvisibility=hidden -pthread --std=c99 -Wno-psabi -fsigned-char --sysroot=C:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/platforms/android-16/arch-arm -IC:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include -IC:\Users\greed\AppData\Local\Android\ndk\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi/include -DHXCPP_VISIT_ALLOCS(haxe) -DHXCPP_API_LEVEL=0(haxe) -IC:/HaxeToolkit/haxe/lib/hxcpp/4,0,64/include -Iinclude -fpic -fvisibility=hidden -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-overflow -D_LINUX_STDDEF_H  -Wno-psabi -DHXCPP_CPP11 -DHXCPP_ARMV5 -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -march=armv5te -mtune=xscale -msoft-float -fomit-frame-pointer -fexceptions -fno-strict-aliasing -finline-limit=10000 -DANDROID=ANDROID -DHX_ANDROID -DHXCPP_ANDROID_PLATFORM=16 -Wa,--noexecstack -O2 -DNDEBUG -c ... tags=[haxe,static]
 - lib/openal/Alc/effects/compressor.c
 - lib/openal/Alc/ringbuffer.c
 - lib/openal/Alc/mastering.c
 - lib/openal/common/atomic.c
 - lib/openal/OpenAL32/alSource.c
 - lib/openal/common/alcomplex.c
 - lib/openal/OpenAL32/alBuffer.c
Error: In file included from lib/openal/OpenAL32/include/alMain.h:28:0,
                 from ./lib/openal/OpenAL32/alBuffer.c:31:
lib/openal/common/atomic.h:27:23: fatal error: stdatomic.h: No such file or directory
 #include <stdatomic.h>
                       ^
compilation terminated.
Error: In file included from ./lib/openal/Alc/ringbuffer.c:29:0:
lib/openal/common/atomic.h:27:23: fatal error: stdatomic.h: No such file or directory
 #include <stdatomic.h>
                       ^
compilation terminated.
Error: In file included from lib/openal/OpenAL32/include/alMain.h:28:0,
                 from lib/openal/OpenAL32/include/alError.h:4,
                 from ./lib/openal/Alc/effects/compressor.c:24:
lib/openal/common/atomic.h:27:23: fatal error: stdatomic.h: No such file or directory
 #include <stdatomic.h>
                       ^
compilation terminated.

Any good way to see where stdatomic is or if it’s there?

Run lime rebuild android with the Android r15c NDK to rebuild Lime

Using r15c fixed everything. (I was on r10-something.) Thanks for the support!

1 Like

Hi, was anyone recently able to upload two different APKS for ARMV7, ARM64 using the hint “same version number and different version code”. I tried everything I can imagine but Google Console refuses to accept my APKs.

Any other news here? Maybe that App Bundle is in its way?

You can now create Android App Bundle by using the latest version of Lime/HXCPP
<setenv name="ANDROID_GRADLE_TASK" value=":app:bundleRelease" />

I still did not know what happened at your side but I was able to upload different apk files on Google Play Console

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yourcompany.yourapp" android:versionCode="4602" android:versionName="1.0.0" android:installLocation="auto">
	
	<!--<uses-feature android:glEsVersion="0x00020000" android:required="true" />-->
	
	<!--<uses-permission android:name="android.permission.WAKE_LOCK" />-->
	<uses-permission android:name="android.permission.INTERNET" />
	<!--<uses-permission android:name="android.permission.VIBRATE" />-->
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
	<!--<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="29"/>-->
	
	<application android:label="Name of your app">	
		<meta-data android:name="android.max_aspect" android:value="2.5" />
	</application>

          <!--uncomment if using admob ex-->
	<!--<uses-library android:name="org.apache.http.legacy" android:required="false"/>-->
	<supports-screens 
		android:resizeable="true"
		android:smallScreens="true"
		android:normalScreens="true"
		android:largeScreens="true"
		android:xlargeScreens="true"
		android:anyDensity="true"/>	
</manifest>

Using android:versionCode=“4602” for 32bit app (armv7) and android:versionCode=“4603” for 64bit app(arm64). The versioncode of 32bit app is always lower than 64bit app and upload app that supports armv7 chipset first!

project.xml (in short)

   >  <meta title="Name of your app" package="com.yourcompany.yourapp" version="1.0.0" company="Your Company" />
>     	
>     	<!-- output -->
>     	<app main="Main" file="yourapp" path="bin" />
> <!--<setenv name="ANDROID_GRADLE_TASK" value=":app:bundleRelease" />-->
>     <!--<architecture name="arm64" if="android"/>-->
> 	<!--<architecture exclude="armv7" if="android"/>-->
> 	
> 	<architecture name="armv7" if="android"/>
> 	<architecture exclude="arm64" if="android"/>
> <config:android minimum-sdk-version="19" target-sdk-version="29" />
> <template path="templates/AndroidManifest.xml" rename="AndroidManifest.xml" if ="android" />
<window hardware="true" allow-high-dpi="true" width="0" height="0" orientation="portrait" fps="60" resizable="true" vsync="false" fullscreen="true" antialiasing="0" if="cpp"/>
5 Likes

Man I can build a app bundle now. Thank you very much. <3 <3 <3

Works here too. Thanks!