realm / realm-java

Realm is a mobile database: a replacement for SQLite & ORMs
http://realm.io
Apache License 2.0
11.45k stars 1.75k forks source link

Need help signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 #4634

Closed SotoArmando closed 7 years ago

SotoArmando commented 7 years ago

We LOVE to help with any issues or bug you have!

I am trying to get just one apk well done, just one. now look at this. This is a normal apk. an small program.

Bugs: I/python ( 4561): Run user program, change dir and execute entrypoint I/python ( 4561): [WARNING] [Config ] Older configuration version detected (0 instead of 19) I/python ( 4561): [WARNING] [Config ] Upgrading configuration in progress. I/python ( 4561): [INFO ] [Logger ] Record log in /data/data/org.test.codicooking/files/app/.kivy/logs/kivy_17-05-12_0.txt I/python ( 4561): [INFO ] [Kivy ] v1.10.0 I/python ( 4561): [INFO ] [Python ] v2.7.2 (default, May 11 2017, 23:45:28) I/python ( 4561): [GCC 4.8] F/libc ( 4561): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 4579 (SDLThread) I/DEBUG ( 158): I/DEBUG ( 158): Build fingerprint: 'Android/samsung/samsung:4.4.2/KOT49H/3.8.117.0504:userdebug/test-keys' I/DEBUG ( 158): Revision: '0' I/DEBUG ( 158): pid: 4561, tid: 4579, name: SDLThread >>> org.test.codicooking <<< I/DEBUG ( 158): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 I/DEBUG ( 158): eax 00000000 ebx b7707fdc ecx 0000002b edx b76e2004 I/DEBUG ( 158): esi 00000000 edi b77027bc I/DEBUG ( 158): xcs 00000073 xds 0000007b xes 0000007b xfs 00000043 xss 0000007b I/DEBUG ( 158): eip b76e7bdb ebp b7708020 esp 7ee80610 flags 00210246 I/DEBUG ( 158): I/DEBUG ( 158): backtrace: I/DEBUG ( 158): #00 pc 00001bdb /system/bin/linker I/DEBUG ( 158): #01 pc 001ac3af /system/lib/libhoudini.so I/DEBUG ( 158): #02 pc ffffffff I/DEBUG ( 158): I/DEBUG ( 158): stack: I/DEBUG ( 158): 7ee805d0 b76e2000 I/DEBUG ( 158): 7ee805d4 00000f8c I/DEBUG ( 158): 7ee805d8 00000001 I/DEBUG ( 158): 7ee805dc 7ee8064c [stack:4579] I/DEBUG ( 158): 7ee805e0 85f5ce85 /system/lib/libhoudini.so I/DEBUG ( 158): 7ee805e4 1a115030 [stack:4578] I/DEBUG ( 158): 7ee805e8 00004000 I/DEBUG ( 158): 7ee805ec 00004000 I/DEBUG ( 158): 7ee805f0 1a115030 [stack:4578] I/DEBUG ( 158): 7ee805f4 00000473 I/DEBUG ( 158): 7ee805f8 b76ed8c9 /system/bin/linker I/DEBUG ( 158): 7ee805fc b7707fdc /system/bin/linker I/DEBUG ( 158): 7ee80600 00000000 I/DEBUG ( 158): 7ee80604 00000000 I/DEBUG ( 158): 7ee80608 b7708020 /system/bin/linker I/DEBUG ( 158): 7ee8060c b76e7b91 /system/bin/linker I/DEBUG ( 158): #00 7ee80610 00000000 I/DEBUG ( 158): 7ee80614 00000000 I/DEBUG ( 158): 7ee80618 15204398 /data/data/org.test.codicooking/files/app/lib/python2.7/lib-dynload/_ctypes.so I/DEBUG ( 158): 7ee8061c 7ee8063c [stack:4579] I/DEBUG ( 158): 7ee80620 860381f1 /system/lib/libhoudini.so I/DEBUG ( 158): 7ee80624 86237b6c I/DEBUG ( 158): 7ee80628 15204398 /data/data/org.test.codicooking/files/app/lib/python2.7/lib-dynload/_ctypes.so I/DEBUG ( 158): 7ee8062c 00000000 I/DEBUG ( 158): 7ee80630 00000001 I/DEBUG ( 158): 7ee80634 00000001 I/DEBUG ( 158): 7ee80638 00000000 I/DEBUG ( 158): 7ee8063c 7ee80748 [stack:4579] I/DEBUG ( 158): 7ee80640 00000000 I/DEBUG ( 158): 7ee80644 00000000 I/DEBUG ( 158): 7ee80648 7ee80678 [stack:4579] I/DEBUG ( 158): 7ee8064c 860563b0 /system/lib/libhoudini.so I/DEBUG ( 158): #01 7ee80650 00000000 I/DEBUG ( 158): 7ee80654 00000000 I/DEBUG ( 158): 7ee80658 8618dc84 /system/lib/libhoudini.so I/DEBUG ( 158): 7ee8065c 7ee8068c [stack:4579] I/DEBUG ( 158): 7ee80660 1a1151c0 [stack:4578] I/DEBUG ( 158): 7ee80664 86237b6c I/DEBUG ( 158): 7ee80668 00000002 I/DEBUG ( 158): 7ee8066c 7ee8068c [stack:4579] I/DEBUG ( 158): 7ee80670 00000000 I/DEBUG ( 158): 7ee80674 1a115030 [stack:4578] I/DEBUG ( 158): 7ee80678 7ee80738 [stack:4579] I/DEBUG ( 158): 7ee8067c 860486e8 /system/lib/libhoudini.so I/DEBUG ( 158): 7ee80680 00000000 I/DEBUG ( 158): 7ee80684 00000000 I/DEBUG ( 158): 7ee80688 00000004 I/DEBUG ( 158): 7ee8068c 7ee806fc [stack:4579]

Expected Results

Work.

This is Codi Cook Timer.

Zhuinden commented 7 years ago

Realm version? Device? Encryption yes or no?

beeender commented 7 years ago

1 pc 001ac3af /system/lib/libhoudini.so

Is it a x86 device and using arm ABI so?

Zhuinden commented 7 years ago

When does the crash happen, on what line? Please provide sample code. Also I see SDL Thread, so maybe it's a 32-bit 64-bit mismatch between your native libraries.

In that case you might even want to show your dependencies.

SotoArmando commented 7 years ago

!/usr/bin/env python

-- coding: utf-8 --

import os.path from kivy.uix.behaviors import ButtonBehavior

C1 = "[color=#13C0C7]" C2 = "[color=#404040]" C3 = "[color=#ff3333]" C4 = "[color=#000000]"

metrics = MetricsBase()

android_dpi = metrics.dpi_rounded()

patch = os.path.dirname(os.path.abspath(file)) asset_dpi = [.75,1.,1.5,2.,3.,4.] asset_dpi2 = ['ldpi','mdpi','hdpi','xhdpi','xxhdpi','xxxhdpi'] icon = patch + '/icons/' hud = patch + '/hud/' database = patch + '/database/' color = patch + '/hud/colors/' sound = patch + '/sounds/'

asset = '' for i in asset_dpi: if 1. == i: asset = patch + '/asset/drawable-'+str(asset_dpi2[asset_dpi.index(i)])+'/'

class ImageButton(ButtonBehavior, AsyncImage): pass

class InterfaceManager(RelativeLayout): def init(self, kwargs): super(InterfaceManager, self).init(kwargs) self.dimstate2 = True self.Contador_state = 1 self.Tiempo = float(0)

self.mainparent()

    #self.screen1()
    #self.activar_state()
    self.dimstate1 = False
    self.add_widget(Button(text = "hola"))

def Activar(self):
    def setfalse(self): 
        self.dimstate2 = False

    if self.dimstate2 == False: 
        self.dimstate2 = True
        Clock.schedule_interval(lambda x: setfalse, 5)
    else:
        mPlayer = MediaPlayer()
        mPlayer.setDataSource(sound + 'default.wav')
        mPlayer.prepare()
        mPlayer.start()

def mainparent(self):
    self.Mainparent = ScreenManager()
    self.add_widget(self.Mainparent)

def TextTimerwidget(self):
    parent = GridLayout(rows = 1,size_hint_y = None, height = '100dp')
    l = ['0','0',':','0','0',':','0','0']
    self.l_buttons = []
    parent.add_widget(Label())
    for i in l:
        textletter = Button(text = C4+i,markup = True, background_normal = color+"16.png",background_down = color+"16.png", font_size = '60sp', size_hint_x = None, width = '35dp')
        parent.add_widget(textletter)
        self.l_buttons.append(textletter)
    parent.add_widget(Label())
    return parent

def screen1(self):
    self.Screen1 = Screen()
    self.Mainparent.add_widget(self.Screen1)

    self.Screen1_parent = GridLayout(cols = 1)
    self.Screen1.add_widget(self.Screen1_parent)

    self.Screen1_parent.add_widget(self.Topmenu())

    self.TextTimerV2 = Button(size_hint_y = None, height = '50dp' , font_size = '20sp',markup = True, text = C4+"0 Horas 0 Minutos y 0 Segundos", background_normal = color + "16.png")
    self.Screen1_parent.add_widget(self.TextTimerwidget())
    self.Screen1_parent.add_widget(self.TextTimerV2)

    self.Buttons_parent = GridLayout(size_hint_y = None , height = "64dp", rows = 1)
    self.Buttons_parent.add_widget(Label())
    Buttons_parent_backgrounds = ['hud15','hud14','hud16']

    for i in range(3): 
        Buttonx = ImageButton(size_hint_x = None , width = "64dp", source = asset + Buttons_parent_backgrounds[i] + '.png')
        Buttonx_parent = Scatter()
        Buttonx_parentparent = GridLayout(cols =1, size_hint_y = None, size_hint_x = None, width = '64dp')
        Buttonx_parent.add_widget(Buttonx)
        Buttonx_parentparent.add_widget(Buttonx_parent)
        Buttonx.bind(on_press = lambda x:self.Animatesize(x.parent))
        self.Buttons_parent.add_widget(Buttonx_parentparent)
        if i == 0: Buttonx.bind(on_release = lambda x: self.activar_state())
        if i == 1: Buttonx.bind(on_release = lambda x: self.ReiniciarTiempo(x))
        if i == 2: Buttonx.bind(on_release = lambda x: self.ReducirTiempo(self.Tiempo))

    self.Buttons_parent.add_widget(Label())
    self.Screen1_parent.add_widget(self.Buttons_parent)

    self.RootControls = GridLayout(rows = 1, size_hint_y = None , height = '64dp')
    self.RootControl1 = ImageButton(size_hint_x = None , width = '64dp', source = asset + "Path 2.png")
    self.RootControl2 = ImageButton(size_hint_x = None , width = '64dp', source = asset + "Path 1.png")
    self.RootControls.add_widget(self.RootControl1)
    self.RootControls.add_widget(Label())
    self.RootControls.add_widget(self.RootControl2)
    self.Screen1_parent.add_widget(self.RootControls)
    def RootControls_release(n):
        if n == 0: 
            self.Controls.transition = SlideTransition(direction = "left")
            self.Controls.current = self.Controls.next()
        else: 
            self.Controls.transition = SlideTransition(direction = "right")
            self.Controls.current = self.Controls.previous()

    self.Controls = ScreenManager(size_hint_y = None , height = '64dp')
    self.RootControl1.bind(on_release = lambda x: RootControls_release(1))
    self.RootControl2.bind(on_release = lambda x: RootControls_release(0))
    self.Screen1_parent.add_widget(self.Controls)
    NewControls = {0: ["30S"," 60S"," 180S"], 1: ["180S"," 300S","900S"], 2: [" 900S","1800S","3600S"]}
    NewControls_images = {0: ["Group 4","Group 5","Group 6"], 1: ['Group 6','Group 8','Group 9'], 2: ['Group 1','Group 2','Group 3']}

    for N in range(3):
        Control_Screen = Screen(name = "Control" + str(N))
        Control_Screen_parent = GridLayout(rows = 1)
        Control_Screen.add_widget(Control_Screen_parent)
        Control_Screen_parent.add_widget(Label())
        ControlButtonsArray = []
        for x in NewControls[N]:
            index = NewControls[N].index(x)

            Controlbutton = Button(border = [0,0,0,0],font_size = '26sp',markup = True,text_size = (5,5),text = x, background_down = asset + NewControls_images[N][index] + '.png', background_normal = asset + NewControls_images[N][index] + '.png',size_hint_y = 1, height = '64dp',  size_hint_x = 1 , width = '64dp')
            Controlbutton_parent = Scatter(do_translation_y=False,do_translation_x=False)
            Controlbutton_parent.add_widget(Controlbutton)
            Controlbutton_parentparent = GridLayout(size_hint_x = None ,height = '64dp',size_hint_y = None, width = '64dp', cols = 1)
            Controlbutton_parentparent.add_widget(Controlbutton_parent)

            Controlbutton.bind(on_press = lambda x: self.AumentarTiempo(int(x.text[:-1]),x))
            Control_Screen_parent.add_widget(Controlbutton_parentparent)
            if index == 2: pass
            else:Control_Screen_parent.add_widget(Label(size_hint_x = None, width = 30))

        Control_Screen_parent.add_widget(Label())

        self.Controls.add_widget(Control_Screen)

def ReiniciarTiempo(self,button):
    #self.Animatesize(button.parent)
    self.Tiempo = self.TimeState
    self.CalcularTiempo(1)
    if self.Contador_state == 1: self.Contador_state *= -1      

def ReducirTiempo(self,Plus):
    C1 = "[color=#000000]"
    if Plus == self.Tiempo:
        self.dimstate1 = True
    self.Tiempo -= Plus
    self.CalcularTiempo(1)
    if self.Contador_state == 1: self.Contador_state *= -1

    threading.Timer(1, self.activar_contar).cancel()
    Letras = ["0","0",":","0","0",":","0","0"]
    for i in self.l_buttons:
        i.text = C1+Letras[self.l_buttons.index(i)]

def Topmenu(self):

    choose = ScrollView(bar_margin = 0,size_hint_y = None,height = '120dp' ,do_scroll_y = False, do_scroll_x = True ,scroll_x = 0.5,bar_color = [0,0,0,.6],bar_inactive_color = [.7,.7,.7,.2],bar_width = 3, bar_pos_x = "top")
    chooseroot_root = RelativeLayout(size_hint_y = 1, size_hint_x = None, width = 1200)
    chooseroot = GridLayout(rows = 1, size_hint_y = 1, size_hint_x = 1, spacing = 5)
    chooseroot_root.add_widget(chooseroot)
    choose.add_widget(chooseroot_root)
    self.medio = Image(source = icon + "clock.png", size_hint = (None,None), size = ('24dp','24dp'), pos = (0,dp(100)-dp(24)))
    chooseroot_root.add_widget(self.medio)

    imgset = ["bacon","bread","coffeex","fried-egg","meat","toaster","tea","teapot","pizza","shrimp"]

    for i in range(10):  
        if i == 0:
            chooseroot.add_widget(Image(source = hud+"None.png",allow_stretch = True, keep_ratio = False,size_hint_x = None, width = '64dp')) 
        self.container = GridLayout(cols = 1, size_hint = (1,1))
        dpix = (dp(120)/2) - (dp(64)/2) 
        image = ImageButton(source = icon +imgset[i]+".png",size_hint = (None,None),width = '64dp', height = '64dp', allow_stretch = True,  keep_ratio = True,  pos = (0,dpix) )
        self.imagescatter = Scatter(scale = 1,do_translation_y=False,do_translation_x=False,source = asset +imgset[i],size_hint = (1,1) , allow_stretch = True,  keep_ratio = True)

        image.bind(on_press =lambda x: self.Animatesize(x.parent))
        self.imagescatter.add_widget(image)
        self.container.add_widget(self.imagescatter)
        chooseroot.add_widget(self.container)

        if i == 9:
            chooseroot.add_widget(Image(source = hud+"None.png",allow_stretch = True, keep_ratio = False,size_hint_x = None, width = '64dp'))

    return choose 

def Animatesize(self,button):

    #print button.parent.pos

    anim3 = Animation(x = button.parent.pos[0], d = .75, t = "in_out_back")
    anim3.start(self.medio)
    button.scale = 1.0
    anim1 = Animation(scale = 1.5, d = .05,t = "in_circ")
    anim2 = Animation(scale = 1.0, d = .15,t = "out_circ")
    anim = anim1 + anim2
    anim.start(button)

def activar_contar(self):
    if self.Tiempo == 0:
        pass
        if self.Contador_state == -1: threading.Timer(1, self.activar_contar).cancel()
    else:
        if self.Contador_state == 1: 
            threading.Timer(1, self.activar_contar).start()
            self.contar()
            self.CalcularTiempo(1)

def contar(self):  
    self.Tiempo -= 1
    self.CalcularTiempo(1)
    if self.dimstate1 == True:
        self.dimstate1 = False
        pass
    else:
        #print "ACTIVANDO."
        if self.Tiempo == 0: 
            self.Contador_state *= -1
            self.Activar()

def activar_state(self):
    self.Contador_state *= -1
    self.activar_contar()

def AumentarTiempo(self,Plus,button):
    self.Animatesize(button.parent)
    self.Tiempo += Plus
    self.CalcularTiempo(1)
    self.TimeState = self.Tiempo
    print self.Tiempo

def CalcularTiempo(self,In):
    segundos = (((self.Tiempo/60))%1)*60
    minutos = ((((self.Tiempo/60))/60)%1)*60
    horas = (((((self.Tiempo/60))/60)/60)%1)*60
    print ("Calculando" + str(self.Tiempo) + " segundos...")

    if segundos< 10: segundos = "0"+ str(segundos)[:-2]
    else: segundos = str(segundos)[:-2]
    if minutos< 10: minutos = "0"+ str(int(minutos))
    else: minutos = str(int(minutos))
    if horas < 10: horas = "0"+ str(int(horas))
    else: horas = str(int(horas))

    TimeVar = (str(horas)+":"+str(minutos)+":"+str(segundos))

    self.TextTimerV2.text = (C4+str(horas)+" Horas "+str(minutos)+" Minutos y "+str(segundos))+" segundos"
    print TimeVar
    cc = 0
    for i in TimeVar: 
        self.l_buttons[cc].text = C4+i
        cc += 1
    print horas
    print minutos
    print segundos

class MyApp(App): def build(self): return InterfaceManager()

if name in ('main', 'android'): MyApp().run()

SotoArmando commented 7 years ago

[app]

(str) Title of your application

title = Codi Cooking

(str) Package name

package.name = codicooking

(str) Package domain (needed for android/ios packaging)

package.domain = org.test

(str) Source code where the main.py live

source.dir = .

(list) Source files to include (let empty to include all the files)

source.include_exts = py,png,jpg,kv,atlas,wav,ttf

(list) List of inclusions using pattern matching

source.include_patterns = assets/,images/.png

(list) Source files to exclude (let empty to not exclude anything)

source.exclude_exts = spec

(list) List of directory to exclude (let empty to not exclude anything)

source.exclude_dirs = tests, bin

(list) List of exclusions using pattern matching

source.exclude_patterns = license,images//.jpg

(str) Application versioning (method 1)

version = 0.001

(str) Application versioning (method 2)

version.regex = version = '"['"]

version.filename = %(source.dir)s/main.py

(list) Application requirements

comma seperated e.g. requirements = sqlite3,kivy

requirements = kivy,requests,futures,pyjnius

(str) Custom source folders for requirements

Sets custom source for any requirements with recipes

requirements.source.kivy = ../../kivy

(list) Garden requirements

garden_requirements =

(str) Presplash of the application

presplash.filename = %(source.dir)s/data/presplash.png

(str) Icon of the application

icon.filename = %(source.dir)s/data/icon.png

(str) Supported orientation (one of landscape, portrait or all)

orientation = portrait

(list) List of service to declare

services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#

OSX Specific

#

#

author = © Copyright Info

change the major version of python used by the app

osx.python_version = 2.7.13

Kivy version to use

osx.kivy_version = 1.10.0

#

Android specific

#

(bool) Indicate if the application should be fullscreen or not

fullscreen = 0

(string) Presplash background color (for new android toolchain)

Supported formats are: #RRGGBB #AARRGGBB or one of the following names:

red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,

darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,

olive, purple, silver, teal.

android.presplash_color = #FFFFFF

(list) Permissions

android.permissions = INTERNET

(int) Android API to use

android.api = 19

(int) Minimum API required

android.minapi = 9

(int) Android SDK version to use

android.sdk = 20

(str) Android NDK version to use

android.ndk = 9c

(bool) Use --private data storage (True) or --dir public storage (False)

android.private_storage = True

(str) Android NDK directory (if empty, it will be automatically downloaded.)

android.ndk_path =

(str) Android SDK directory (if empty, it will be automatically downloaded.)

android.sdk_path =

(str) ANT directory (if empty, it will be automatically downloaded.)

android.ant_path =

(str) python-for-android git clone directory (if empty, it will be automatically cloned from github)

android.p4a_dir =

(str) The directory in which python-for-android should look for your own build recipes (if any)

p4a.local_recipes =

(str) Filename to the hook for p4a

p4a.hook =

(list) python-for-android whitelist

android.p4a_whitelist =

(bool) If True, then skip trying to update the Android sdk

This can be useful to avoid excess Internet downloads or save time

when an update is due and you just want to test/build your package

android.skip_update = False

(str) Bootstrap to use for android builds (android_new only)

android.bootstrap = sdl2

(str) Android entry point, default is ok for Kivy-based app

android.entrypoint = org.renpy.android.PythonActivity

(list) List of Java .jar files to add to the libs so that pyjnius can access

their classes. Don't add jars that you do not need, since extra jars can slow

down the build process. Allows wildcards matching, for example:

OUYA-ODK/libs/*.jar

android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

(list) List of Java files to add to the android project (can be java or a

directory containing the files)

android.add_src =

(str) python-for-android branch to use, if not master, useful to try

not yet merged features.

android.branch = master

(str) OUYA Console category. Should be one of GAME or APP

If you leave this blank, OUYA support will not be enabled

android.ouya.category = GAME

(str) Filename of OUYA Console icon. It must be a 732x412 png image.

android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

(str) XML file to include as an intent filters in tag

android.manifest.intent_filters =

(list) Android additionnal libraries to copy into libs/armeabi

android.add_libs_armeabi = libs/android/*.so

android.add_libs_armeabi_v7a = libs/android-v7/*.so

android.add_libs_x86 = libs/android-x86/*.so

android.add_libs_mips = libs/android-mips/*.so

(bool) Indicate whether the screen should stay on

Don't forget to add the WAKE_LOCK permission if you set this to True

android.wakelock = False

(list) Android application meta-data to set (key=value format)

android.meta_data =

(list) Android library project to add (will be added in the

project.properties automatically.)

android.library_references =

(str) Android logcat filters to use

android.logcat_filters = *:S python:D

(bool) Copy library instead of making a libpymodules.so

android.copy_libs = 1

(str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86

android.arch = armeabi-v7a

#

iOS specific

#

(str) Path to a custom kivy-ios folder

ios.kivy_ios_dir = ../kivy-ios

(str) Name of the certificate to use for signing the debug version

Get a list of available identities: buildozer ios list_identities

ios.codesign.debug = "iPhone Developer: ()"

(str) Name of the certificate to use for signing the release version

ios.codesign.release = %(ios.codesign.debug)s

[buildozer]

(int) Log level (0 = error only, 1 = info, 2 = debug (with command output))

log_level = 2

(int) Display warning if buildozer is run as root (0 = False, 1 = True)

warn_on_root = 1

(str) Path to build artifact storage, absolute or relative to spec file

build_dir = /build/buildozer-myapp

(str) Path to build output (i.e. .apk, .ipa) storage

bin_dir = /media/sf_App

-----------------------------------------------------------------------------

List as sections

#

You can define all the "list" as [section:key].

Each line will be considered as a option to the list.

Let's take [app] / source.exclude_patterns.

Instead of doing:

#

[app]

source.exclude_patterns = license,data/audio/.wav,data/images/original/

#

This can be translated into:

#

[app:source.exclude_patterns]

license

data/audio/*.wav

data/images/original/*

#

-----------------------------------------------------------------------------

Profiles

#

You can extend section / key with a profile

For example, you want to deploy a demo version of your application without

HD content. You could first change the title to add "(demo)" in the name

and extend the excluded directories to remove the HD content.

#

[app@demo]

title = My Application (demo)

#

[app:source.exclude_patterns@demo]

images/hd/*

#

Then, invoke the command line with the "demo" profile:

#

buildozer --profile demo android debug

kneth commented 7 years ago

We haven't been able to figure out how libhoudini is working - see for example #1398 and #1473. From your stack trace, it appears that you are using it.