- Home /
Success! I have successfully integrated a Unity interstitial ad in Python Kivy, but it crashes after 10 displays, any hints on how to improve stability?
As I'm planning to use Unity ads for a long time, I thought I might create a module called KivUnity (in the long run). Here is my Python code( I think its rather clumsy atm):
import re
import sys
import os
from jnius import autoclass, PythonJavaClass, java_method, cast
from kivy.app import App
import logging
testmode = True
PythonActivity = autoclass("org.kivy.android.PythonActivity")
Unity_ads_listener = autoclass("com.unity3d.ads.IUnityAdsListener")
Unity_ads = autoclass("com.unity3d.ads.UnityAds")
class Unity_handler:
def __init__(self, a_id):
self.app_id = a_id
def init_unity(self):
new_ad_listener = UnityAdsListener()
Unity_ads.addListener(new_ad_listener)
self.c_activity = cast('android.app.Activity',PythonActivity.mActivity)
Unity_ads.initialize(self.c_activity,self.app_id,testmode)
def show_ad(self, id_num):
#show interstial ads
self.inter_id = id_num
if Unity_ads.isReady(self.inter_id):
try:
Unity_ads.show(self.c_activity, self.inter_id)
except:
fail=1
class UnityAdsListener(PythonJavaClass):
__javacontext__= 'app'
__javainterfaces__= ['com/unity3d/ads/IUnityAdsListener']
#def __init__(self):
# super(IUnityAdsListener, self).__init__()
# #self.callback = callback
@java_method('(Ljava/lang/String;)V')
def onUnityAdsReady(inter_id):
pass
@java_method('(Ljava/lang/String;)V')
def onUnityAdsStart(inter_id):
pass
@java_method('(Ljava/lang/String;Ljava/lang/String;)V')
def onUnityAdsFinish(inter_id,un_f):
pass
@java_method('(Lcom/unity3d/ads/UnityAds$UnityAdsError;Ljava/lang/String;)V')
def onUnityAdsError(self,error, message):
pass
ADB error: 09-05 16:51:40.760 12274 12290 E : 0 09-05 16:51:40.761 12274 12290 E : appName=com.oracle.oracle, acAppName=vStudio.Android.Camera360 09-05 16:51:40.761 12274 12290 E : 0 09-05 16:51:40.764 12274 12290 E : appName=com.oracle.oracle, acAppName=vStudio.Android.Camera360 09-05 16:51:40.764 12274 12290 E : 0 09-05 16:51:40.775 260 454 D AudioFlinger_Threads: 0xa8603180:threadLoop_write write muted data to hw, mixerStatus 1 start 09-05 16:51:40.778 12274 12274 I python : Traceback (most recent call last): 09-05 16:51:40.780 789 840 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.780 12274 12274 I python : File "jnius/jnius_proxy.pxi", line 156, in jnius.jnius.invoke0 09-05 16:51:40.781 789 840 D WindowManager: notifyActivityDrawnForKeyguard: waiting=false Callers=com.android.server.wm.WindowSurfacePlacer.handleAppTransitionReadyLocked:1227 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementInner:337 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop:235 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement:183 com.android.server.wm.WindowManagerService$H.handleMessage:8417 09-05 16:51:40.781 12274 12274 I python : File "jnius/jnius_proxy.pxi", line 124, in jnius.jnius.py_invoke0 09-05 16:51:40.781 789 840 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.782 12274 12274 I python : AttributeError: 'kivy.core.text.text_layout.LayoutWord' object has no attribute 'invoke' 09-05 16:51:40.783 12274 12274 D AndroidRuntime: Shutting down VM 09-05 16:51:40.786 789 840 I ActivityManager: Displayed com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity: +166ms 09-05 16:51:40.787 789 882 I libPerfService: 1: set: 3 09-05 16:51:40.787 789 882 I libPerfService: 1: set freq: 819000 09-05 16:51:40.792 12274 12274 E AndroidRuntime: FATAL EXCEPTION: main 09-05 16:51:40.792 12274 12274 E AndroidRuntime: Process: com.oracle.oracle, PID: 12274 09-05 16:51:40.792 12274 12274 E AndroidRuntime: java.lang.NullPointerException: Expected to unbox a 'int' primitive type but was returned null 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at $Proxy0.hashCode(Unknown Source) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at sun.misc.Hashing.singleWordWangJenkinsHash(Hashing.java:48) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.HashMap.put(HashMap.java:423) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.HashSet.add(HashSet.java:217) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.AbstractCollection.addAll(AbstractCollection.java:342) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.LinkedHashSet.(LinkedHashSet.java:169) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.unity3d.ads.properties.AdsProperties.getListeners(AdsProperties.java:47) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.unity3d.services.ads.api.Listener$5.run(Listener.java:76) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:836) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:103) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Looper.loop(Looper.java:203) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6251) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 09-05 16:51:40.796 789 976 W ActivityManager: Force finishing activity com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity 09-05 16:51:40.797 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.800 789 976 V WindowManager: Set focused app to: AppWindowToken{2a7bc85 token=Token{135ceef ActivityRecord{85eafce u0 com.oracle.oracle/org.kivy.android.PythonActivity t8835}}} old focus=AppWindowToken{948716 token=Token{1f82431 ActivityRecord{1ffe8d8 u0 com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity t8835}}} moveFocusNow=true 09-05 16:51:40.800 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.801 789 976 W ActivityManager: Force finishing activity com.oracle.oracle/org.kivy.android.PythonActivity 09-05 16:51:40.801 789 882 I libPerfService: 1: set freq: 1300000 09-05 16:51:40.801 789 882 I libPerfService: 1: set: 4 09-05 16:51:40.803 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.803 789 976 V WindowManager: findFocusedWindow: No focusable windows. 09-05 16:51:40.803 789 12572 D AES : onEndOfErrorDumpThread: data_app_crash Process: com.oracle.oracle 09-05 16:51:40.803 789 12572 D AES : Flags: 0x3888be46 09-05 16:51:40.803 789 12572 D AES : Package: com.oracle.oracle v7214 (0.4) 09-05 16:51:40.803 789 12572 D AES : Foreground: Yes 09-05 16:51:40.803 789 12572 D AES : Build: OUKITEL/U22/U22:7.0/NRD90M/1508468660:user/release-keys 09-05 16:51:40.803 789 12572 D AES : 09-05 16:51:40.803 789 12572 D AES : java.lang.NullPointerException: Expected to unbox a 'int' primitive type but was returned null 09-05 16:51:40.803 789 12572 D AES : at $Proxy0.hashCode(Unknown Source) 09-05 16:51:40.803 789 12572 D AES : at sun.misc.Hashing.singleWordWangJenkinsHash(Hashing.java:48) 09-05 16:51:40.803 789 12572 D AES : at java.util.HashMap.put(HashMap.java:423) 09-05 16:51:40.803 789 12572 D AES : at java.util.HashSet.add(HashSet.java:217) 09-05 16:51:40.803 789 12572 D AES : at java.util.AbstractCollection.addAll(AbstractCollection.java:342) 09-05 16:51:40.803 789 12572 D AES : at java.util.LinkedHashSet.(LinkedHashSet.java:169) 09-05 16:51:40.803 789 12572 D AES : at com.unity3d.ads.properties.AdsProperties.getListeners(AdsProperties.java:47) 09-05 16:51:40.803 789 12572 D AES : at com.unity3d.services.ads.api.Listener$5.run(Listener.java:76) 09-05 16:51:40.803 789 12572 D AES : at android.os.Handler.handleCallback(Handler.java:836) 09-05 16:51:40.803 789 12572 D AES : at android.os.Handler.dispatchMessage(Handler.java:103) 09-05 16:51:40.803 789 12572 D AES : at android.os.Looper.loop(Looper.java:203) 09-05 16:51:40.803 789 12572 D AES : at android.app.ActivityThread.main(ActivityThread.java:6251) 09-05 16:51:40.803 789 12572 D AES : at java.lang.reflect.Method.invoke(Native Method) 09-05 16:51:40.803 789 12572 D AES : at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 09-05 16:51:40.803 789 12572 D AES : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 09-05 16:51:40.803 789 12572 D AES : 12274
Your answer
Follow this Question
Related Questions
Java - Android - Accessing the /data/data folder 0 Answers
Unity ads successfully integrated in Python Kivy app, but crashes after 10 displays, help needed. 0 Answers
[Unity 5 / Android] How to set Non-fullscreen by Default? 1 Answer
Accessing Data from a Android java class 1 Answer
Issue installing apk using old Cert 1 Answer