Search Unity

  1. Megacity Metro Demo now available. Download now.
    Dismiss Notice
  2. Unity support for visionOS is now available. Learn more in our blog post.
    Dismiss Notice

Burstly plugin for Unity Android

Discussion in 'Android' started by SeikoTheWiz, May 2, 2012.

  1. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    Hello!
    I've got to dev a plugin for Burstly but I have a lot of troubles doing that!

    I've started to take the unity docs and then the examples done by people doing a plugin for adMob.

    I've got to a point where I can make my plugin.jar, call it and... crash.
    Burstly got in his SDK a lot of files and especially project.properties and version.properties that are used to init Burstly.

    I tried to copy the file with the build xml to my jar with <copy todir=""> which worked, but burstly still wasn't able to find the files. (the error is saying: E/com.burstly.lib.constants.ProjectProperties(7556): FATAL ERROR! Application could not find properties file: project.properties)
    I'm quite unsure where the files should be. In my jar? Then why doesn't it work if I just add burstly's jar?

    [edit] Also I'm quite unsure about something in my manifest. I'm extending UnityPlayerActivity and in my manifest I got 'package="com.unity3d.player"' and not com.mycompany.myappname since when I put my myappname the game crashes even before the plugin crashes it.[/edit]

    Did anyone had a similar issue on another plugin? Every help would be appreciated! I'm loosing too much time on this ;(

    thank you!
     
    Last edited: May 2, 2012
  2. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    made it work by copy-pasting the files from the burstly SDK directly into the APK then re-signing the apk.
    It's really a tough process and I'm going to write a PostprocessBuildPlayer to simplify the process...
     
  3. blueflame

    blueflame

    Joined:
    Oct 5, 2011
    Posts:
    6
    Are you going to release this plugin in asset store?
     
  4. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    it was really just for my uses so no.
    (And actually right now I can initialize burstly but don't show any adds -_-)

    When it will be working I'll come and share what I've done.
     
  5. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    Ok so here's the basics:

    BurstlyActivity.Java:

    Code (csharp):
    1. package com.company.game
    2.  
    3. import com.burstly.lib.BurstlySdk;
    4.  
    5. import com.burstly.lib.ui.BurstlyView;
    6. import com.unity3d.player.UnityPlayerActivity;
    7.  
    8. import android.view.ViewGroup.LayoutParams;
    9. import android.widget.LinearLayout;
    10. import android.os.Bundle;
    11.  
    12. public class BurstlyActivity extends UnityPlayerActivity
    13. {
    14.     private BurstlyView mBanner;
    15.     private static BurstlyActivity m_instance;
    16.  
    17.     public static BurstlyActivity instance()
    18.     {
    19.         if(m_instance == null)
    20.             m_instance = new BurstlyActivity();
    21.         return m_instance;
    22.     }
    23.  
    24.     @Override
    25.     public void onCreate(Bundle savedInstanceState)
    26.     {
    27.         super.onCreate(savedInstanceState);
    28.  
    29.         BurstlySdk.init(this);
    30.  
    31.         SetupView();
    32.     }
    33.  
    34.     private void SetupView()
    35.     {
    36.         LinearLayout layout = new LinearLayout(this);
    37.         layout.setOrientation(LinearLayout.HORIZONTAL);
    38.         layout.setGravity(android.view.Gravity.BOTTOM | android.view.Gravity.CENTER_HORIZONTAL);
    39.  
    40.         mBanner = new BurstlyView(this);
    41.         layout.addView(mBanner, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    42.         addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    43.         mBanner.setPublisherId("yourPublisherID");
    44.         mBanner.setZoneId("yourZoneID");
    45.  
    46.         mBanner.setBurstlyViewId("bannerBurstlyView");
    47.         mBanner.setDefaultSessionLife(15);
    48. }
    49.  
    50.     @Override
    51.     public void onDestroy()
    52.     {
    53.         //When the Activity is destroyed, destroy the BurstlyViews
    54.         mBanner.destroy();
    55.         BurstlySdk.shutdown(this);
    56.         super.onDestroy();
    57.     }
    58.  
    59.     public void ShowAds()
    60.     {
    61.         mBanner.sendRequestForAd();
    62.         mBanner.onShowActivity();
    63.     }
    64.  
    65.     public void HideAds()
    66.     {
    67.         mBanner.onHideActivity();
    68.     }
    69.  
    70.     @Override
    71.     public void onResume()
    72.     {
    73.         //Notify the BurstlyViews that their Activity is being shown.
    74.         mBanner.onShowActivity();
    75.  
    76.         super.onResume();
    77.     }
    78.  
    79.     @Override
    80.     public void onPause()
    81.     {
    82.         //Notify the BurstlyViews that their Activity is being hidden.
    83.         mBanner.onHideActivity();
    84.  
    85.         super.onPause();
    86.     }
    87. }
    Then what you need to do is have a script that add burstly's data to the apk, re-sign it and re- align it:

    After the BuildPipeline.BuildPlayer

    Code (csharp):
    1.     void AddingBurstlyToAndroidBuild(string path, BuildTarget buildTarget)
    2.     {
    3.         if (buildTarget == BuildTarget.Android)
    4.         {
    5.             Debug.Log("Copying files to apk\n");
    6.             RecursiveFileBrowsing("", Application.dataPath + "\\Editor\\BurstlyAssets\\");
    7.             Debug.Log("Signing apk\n");
    8.             SignBackApk();
    9.             Debug.Log("Zip aligning apk\n");
    10.             ZipAlignApk();
    11.         }
    12.     }
    13.  
    14.     void RecursiveFileBrowsing(string root, string path)
    15.     {
    16.         string aaptPath = "C:/Program Files/Android/android-sdk/platform-tools/aapt.exe";
    17.         string folderPath = Application.dataPath + "/../Builds/Android/Generic/";
    18.  
    19.         string[] filePaths = Directory.GetDirectories(path);
    20.         string[] rootParts = path.Split('\\');
    21.         string NewRoot = "";
    22.         if (root == "")
    23.             NewRoot = rootParts[rootParts.Length - 1];
    24.         else
    25.             NewRoot = root + "/" + rootParts[rootParts.Length - 1];
    26.  
    27.         foreach (string st in filePaths)
    28.         {
    29.             //Debug.Log(st);
    30.             RecursiveFileBrowsing(NewRoot, st);
    31.  
    32.             string[] files = Directory.GetFiles(st);
    33.             string[] SplitFolderName = st.Split('\\');
    34.  
    35.             string folderName = "";
    36.             if (NewRoot == "")
    37.                 folderName = SplitFolderName[SplitFolderName.Length - 1];
    38.             else
    39.                 folderName = NewRoot + "/" + SplitFolderName[SplitFolderName.Length - 1];
    40.  
    41.             Directory.CreateDirectory(folderPath + folderName);
    42.             foreach (string file in files)
    43.             {
    44.                 string[] names = file.Split('\\');
    45.                 string fileName = names[names.Length - 1];
    46.                 if (fileName == "adview")
    47.                     fileName = "adview.js";
    48.                 if (fileName == "mmbridge")
    49.                     fileName = "mmbridge.js";
    50.  
    51.                 //Debug.Log(folderPath + " " + fileName);
    52.                 File.Copy(file, folderPath + folderName + "\\" + fileName, true);
    53.  
    54.                 string args = "add gameName.apk " + folderName + "/" + fileName;
    55.                 //Debug.Log(args);
    56.                 System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(aaptPath, args);
    57.                 info.WorkingDirectory = folderPath;
    58.                 info.CreateNoWindow = true;
    59.                 info.RedirectStandardError = true;
    60.                 info.RedirectStandardOutput = true;
    61.                 info.UseShellExecute = false;
    62.                 var p = System.Diagnostics.Process.Start(info);
    63.                 string Errors = p.StandardError.ReadToEnd();
    64.                 p.WaitForExit();
    65.                 if (Errors.Contains("File")  Errors.Contains("written."))
    66.                     Debug.LogError("Error on " + fileName + " : " + Errors);
    67.             }
    68.         }
    69.     }
    70.  
    71.     void SignBackApk()
    72.     {
    73.         string keystorePAth = Application.dataPath + "/Plugins/Android/Keystore/yourKEY.keystore";
    74.         string Jarsigner = "C:/Program Files/Java/jdk1.6.0_30/bin/jarsigner.exe";
    75.         string Jargs = "-sigalg MD5withRSA -digestalg SHA1 -keystore " + keystorePAth + " -storepass yourPass build.apk keyname";
    76.         System.Diagnostics.ProcessStartInfo Jinfo = new System.Diagnostics.ProcessStartInfo(Jarsigner, Jargs);
    77.         Jinfo.WorkingDirectory = Application.dataPath + "/../Builds/Android/Generic/";
    78.         Jinfo.CreateNoWindow = true;
    79.         Jinfo.RedirectStandardError = true;
    80.         Jinfo.RedirectStandardOutput = true;
    81.         Jinfo.UseShellExecute = false;
    82.         var p = System.Diagnostics.Process.Start(Jinfo);
    83.         string Errors = p.StandardError.ReadToEnd();
    84.         p.WaitForExit();
    85.         if (Errors.Contains("File")  Errors.Contains("written."))
    86.             Debug.LogError("singing errors: " + Errors);
    87.     }
    88.  
    89.     void ZipAlignApk()
    90.     {
    91.         string ZipAlign = "C:/Program Files/Android/android-sdk/tools/zipalign.exe";
    92.         string Zarg = "-f 4 build.apk Knights.apk";
    93.         System.Diagnostics.ProcessStartInfo Zinfo = new System.Diagnostics.ProcessStartInfo(ZipAlign, Zarg);
    94.         Zinfo.WorkingDirectory = Application.dataPath + "/../Builds/Android/Generic/";
    95.         Zinfo.CreateNoWindow = true;
    96.         Zinfo.RedirectStandardError = true;
    97.         Zinfo.RedirectStandardOutput = true;
    98.         Zinfo.UseShellExecute = false;
    99.         var p = System.Diagnostics.Process.Start(Zinfo);
    100.         string Errors = p.StandardError.ReadToEnd();
    101.         p.WaitForExit();
    102.         if (Errors.Contains("File")  Errors.Contains("written."))
    103.             Debug.LogError("singing errors: " + Errors);
    104.     }
    105.  
    I had another function to install on devide but I don't know why it not working anymore since 3.5

    Be carefull, there's a lot of path and names to change ;)
     
    Last edited: May 15, 2012
  6. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    So you build BurstlyActivity.jar from BurstlyActivity.Java and then call com.company.game via C# using AndroidJavaClass ?
    (and you also add BurstlySDK_1.14.0.8429(all).jar to the project)
     
  7. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    yes I make the jar from the .java
    Use
    Code (csharp):
    1.     public static void ShowAds()
    2.     {
    3.         AndroidJNI.AttachCurrentThread();
    4.  
    5.         // first we try to find our main activity..
    6.         IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    7.         IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    8.         IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);
    9.  
    10.         IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("com/company/gamename/BurstlyActivity");
    11.  
    12.         IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "ShowAds", "()V");
    13.  
    14.         if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    15.         {
    16.             jvalue[] myArray = new jvalue[1];
    17.             AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);
    18.             IsAdvVisible = true;
    19.         }
    20.     }
    21.  
    22.     public static void HideAds()
    23.     {
    24.         AndroidJNI.AttachCurrentThread();
    25.  
    26.         // first we try to find our main activity..
    27.         IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    28.         IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    29.         IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);
    30.  
    31.         IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("com/company/gamename/BurstlyActivity");
    32.         IntPtr stopAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "HideAds", "()V");
    33.  
    34.         if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    35.         {
    36.             jvalue[] myArray = new jvalue[1];
    37.             AndroidJNI.CallVoidMethod(obj_Activity, stopAdsMethod, myArray);
    38.             IsAdvVisible = false;
    39.         }
    40.     }
    in C# to call for the functions.

    And I copy by hand (with the other script) the files that were in the burstlySDK to the apk so burstly have the files it needs to initialize.
     
    Last edited: Jun 7, 2012
  8. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    Made hiding work:
    Code (csharp):
    1.  
    2.     private Handler handler = new Handler()
    3.     {
    4.         public void  handleMessage(Message msg)
    5.         {
    6.             switch (msg.what)
    7.             {
    8.                 case 0:     //Enable but Hide Adv
    9.                     mBanner.setVisibility(View.GONE);
    10.                     break;
    11.                 case 1:     //Enable but Show Adv
    12.                     mBanner.setVisibility(View.VISIBLE);
    13.                     break;
    14.                 default:
    15.                     break;
    16.             }
    17.         }
    18.     };
    19.  
    20.     public void ShowAds()
    21.     {
    22.         mBanner.sendRequestForAd();
    23.         handler.sendEmptyMessage(1);
    24.         mBanner.onShowActivity();
    25.     }
    26.  
    27.     public void HideAds()
    28.     {
    29.         mBanner.onHideActivity();
    30.         handler.sendEmptyMessage(0);
    31.     }
     
    Last edited: May 14, 2012
  9. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Has the Rotastic.apk some special meaning?

    And I should basically call the build script like
    Code (csharp):
    1. BuildPipeline.BuildPlayer(GetScenePaths(), "Builds/Android",BuildTarget.Android,BuildOptions.None);
    2. AddingBurstlyToAndroidBuild("Builds/Android",BuildTarget.Android);
    ?
     
  10. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    no it's only the code name, didn't remove it everywhere ;x (I'll remove it ;p)

    And yes the way it's done on our project we use a special build pipeline (called from an editor script) which first call BuildPlayer then call AddingBurstlyToAndroidBuild
     
  11. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Updated BurstlyActivity.java
    Code (csharp):
    1.  
    2. package com.yourcompany.yourproduct;
    3.  
    4. import com.burstly.lib.BurstlySdk;
    5. import com.burstly.lib.ui.BurstlyView;
    6. import com.unity3d.player.UnityPlayerActivity;
    7. import android.view.ViewGroup.LayoutParams;
    8. import android.widget.LinearLayout;
    9. import android.os.Bundle;
    10. import android.os.Handler;
    11. import android.os.Message;
    12. import android.view.View;
    13.  
    14. public class BurstlyActivity extends UnityPlayerActivity
    15. {
    16.     private BurstlyView mBanner;
    17.     private static BurstlyActivity m_instance;
    18.  
    19.     public static BurstlyActivity instance()
    20.     {
    21.         if(m_instance == null)
    22.             m_instance = new BurstlyActivity();
    23.         return m_instance;
    24.     }
    25.  
    26.     @Override
    27.     public void onCreate(Bundle savedInstanceState)
    28.     {
    29.         super.onCreate(savedInstanceState);
    30.         BurstlySdk.init(this);
    31.         SetupView();
    32.     }
    33.  
    34.     private void SetupView()
    35.     {
    36.         LinearLayout layout = new LinearLayout(this);
    37.         layout.setOrientation(LinearLayout.HORIZONTAL);
    38.         layout.setGravity(android.view.Gravity.BOTTOM | android.view.Gravity.CENTER_HORIZONTAL);
    39.  
    40.         mBanner = new BurstlyView(this);
    41.         layout.addView(mBanner, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
    42.         addContentView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
    43.         mBanner.setPublisherId("yourPublisherID");
    44.         mBanner.setZoneId("yourZoneID");
    45.         mBanner.setBurstlyViewId("bannerBurstlyView");
    46.         mBanner.setDefaultSessionLife(15);
    47. }
    48.  
    49.     @Override
    50.     public void onDestroy()
    51.     {
    52.         //When the Activity is destroyed, destroy the BurstlyViews
    53.         mBanner.destroy();
    54.         BurstlySdk.shutdown(this);
    55.         super.onDestroy();
    56.     }
    57.  
    58.     private Handler handler = new Handler()
    59.     {
    60.         public void  handleMessage(Message msg)
    61.         {
    62.             switch (msg.what)
    63.             {
    64.                 case 0:     //Enable but Hide Adv
    65.                     mBanner.setVisibility(View.GONE);
    66.                     break;
    67.  
    68.                 case 1:     //Enable but Show Adv
    69.                     mBanner.setVisibility(View.VISIBLE);
    70.                     break;
    71.  
    72.                 default:
    73.                     break;
    74.             }
    75.         }
    76.     };
    77.  
    78.     public void ShowAds()
    79.     {
    80.         mBanner.sendRequestForAd();
    81.         handler.sendEmptyMessage(1);
    82.         mBanner.onShowActivity();
    83.     }
    84.  
    85.     public void HideAds()
    86.     {
    87.         mBanner.onHideActivity();
    88.         handler.sendEmptyMessage(0);
    89.     }
    90.  
    91.     @Override
    92.     public void onResume()
    93.     {
    94.         //Notify the BurstlyViews that their Activity is being shown.
    95.         mBanner.onShowActivity();
    96.         super.onResume();
    97.     }
    98.  
    99.     @Override
    100.     public void onPause()
    101.     {
    102.         //Notify the BurstlyViews that their Activity is being hidden.
    103.         mBanner.onHideActivity();
    104.         super.onPause();
    105.     }
    106.  
    107. }
    108.  
    and commands for compiling
    Code (csharp):
    1.  
    2. javac BurstlyActivity.java -classpath /Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/bin/classes.jar:../BurstlyAssets/BurstlySDK_1.14.0.jar:/Users/xxx/android-sdk-macosx/platforms/android-8/android.jar -d .
    3. jar cvf BurstlyActivity.jar com/yourcompany/yourproduct/*.class
     
  12. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Few notices (/ progress update).

    BuildPipeline.BuildPlayer(GetScenePaths(), "Builds/Android",BuildTarget.Android,BuildOptions.None);
    fails in our project. It complains Quaternion To Matrix conversion failed because input Quaternion is invalid and .apk it creates doesn't match normal build .apk (it starts from random scene, with random prefabs).

    There is a workaround for this. Just build .apk normally and then do AddingBurstlyToAndroidBuild for it. (currently I only add assets and Bitmap folders from Burstly*.jar), but I have to do jarsigner again, or otherwise I get [INSTALL_PARSE_FAILED_NO_CERTIFICATES] when I do adb install.

    I still don't get any ads shown, but at least there are some sane error messages like
    Burstly SDK v.1.14.0.8429 BurstlyRequestTask( 7693): 13-06-12 13:01:05:298 Could not get response for 15,000 millisec from req.appads.com
     
  13. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    I couldn't display adds with my own burstly configuration (something I set up before our editor sent the one we should use)
    But I fount on the internet 2 differents values to setup burstly:

    //rovio?
    mBanner.setPublisherId("occh7YQwjUGpHV6o8O_ijg");
    mBanner.setZoneId("0757149479072204834");

    //zipzap
    mBanner.setPublisherId("s_yxkmUh6Ui7QYLxb-l-Og");
    mBanner.setZoneId("0352997179117204659");

    found them on the internet while seraching for some "no ads fount" errors. When using them I could display add ;p
     
  14. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Ads started to work this morning. Next I will try interstitials.
     
  15. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    I haven't done any interstitials but might in the future, I'm interested on how you do them (should be pretty similar i guess)
     
  16. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Interstitials seem to work fine. Just use correct setZoneId for the interstitials since otherwise it will just show banner ads even if you set correct setBurstlyViewId. Preloading might be a good thing because loading interstitial from server can take some time but it would require additional Java code.
     
  17. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    I tend lately to crash on several devices (but not on all) when rebooting the application. At the time burstly is loading the first time there's not preferences "No saved preferences for burstly view with id 'bannerBurstlyView'."
    But when I restart, since he made some the first time, he load them "Loaded saved configuration {} from fs."
    and crash.

    Have you had this?
     
  18. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    No crashes here. But I have only tested with Galaxy S II and Acer Iconia Tab A500.
     
  19. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Does your crash generate message like
    Exception Ljava/lang/RuntimeException; thrown while initializing Landroid/os/AsyncTask
    ?
     
  20. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    now that i have the right Pub ID it's working fine ;)
     
  21. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
  22. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    No. I haven't tried that.
     
  23. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    This is very nice work Seiko, i will be giving it a shot to see if i can get it working. Thanks!
     
  24. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    Yes it does.

    I'm absolutly sure it never happens the first time I launch the game. But if I quit then launch it again, I get this error.
    The only difference I've seen before this point is the creation or loading of the "configuration file" of burstly.

    Another strange thing is it happens sometimes for a while, then no problem for several days, then it comes back.
    Since my configuration is done by chillingo the issue might be in my manifest. But when I miss something in the manifest ad-wise android tells me...

    I'm pretty lost. Was at least trying to try/catch the exception, but didn't work ;p

    edit: it does the same with interstitials and ads
     
  25. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
  26. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    I have gone from using JNI to using the AndroidJavaClass instead due to some problems i got with the JNI approach. But i seems to be getting a ClassNotFound exception when running:
    using( AndroidJavaClass pluginClass = new AndroidJavaClass("com.myburstly.BurstlyActivity") )
    _plugin = pluginClass.CallStatic<AndroidJavaObject>( "instance" );

    In the java file i do have "package com.myburstly;". I have also placed the compiled jar-file in the plugins/Android directory. Any ideas what could be wrong?

    EDIT: Got a little further. Seems that if i used an instance of the class it couldn't find the java class name. But if i just called the functions in my binding class directly from another script that was active in the scene it worked. Now on the other hand i'm getting a "JNI: Unable to find method id for 'ShowAds'". There is always something...
     
    Last edited: Jul 4, 2012
  27. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Is there anything specific that will need to be added to the AndroidManifest.xml? I've been adding some things from the Burstly knowledge page about the AndroidManifest.xml file, but i can't really get any ads to show.
     
  28. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    dependin gon the adds you want you might need to add specifics activities : http://support.burstly.com/kb/getting-started/incorporating-the-sdk-android
    Also, the new SDK specifies that you need to run all the code in the UI Thread, this can be done by adding

    Code (csharp):
    1.         UnityPlayer.currentActivity.runOnUiThread(new Runnable()
    2.         {
    3.             public void run()
    4.             {
    5.                 your code
    6.             }
    7.         });
     
  29. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Did you check with adb logcat?

    And some of those permissions are something you might want to avoid. E.g. android.permission.CALL_PHONE for Inmobi might scare away some customers.
    http://support.burstly.com/kb/android/the-manifest-115
     
  30. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Yes i did check. There is nothing in the logs at all. Just that no ads show up. Shouldn't be anything in the manifest file at this point i think, since then i would get an error stating something was missing.
     
  31. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Seems like the if statement below is never true, so the call to ShowAds is never done. Any idea what could be wrong?

    EDIT: When i change "com/unity3d/player/UnityPlayer" to "com/unity3d/player/UnityPlayerActivity" it enters the if-statement, but then i get a crash with the error "JNI ERROR (app bug): attempt to use stale global reference 0x32". :/

    Code (csharp):
    1.     public static void ShowAds() {
    2.      AndroidJNI.AttachCurrentThread();
    3.  
    4.         // first we try to find our main activity..
    5.         IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
    6.         IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
    7.         IntPtr obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);
    8.  
    9.         IntPtr cls_OurAppNameActivityClass = AndroidJNI.FindClass("com/myburstly/BurstlyActivity");
    10.  
    11.         IntPtr startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "ShowAds", "()V");
    12.  
    13.         if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    14.         {
    15.             jvalue[] myArray = new jvalue[1];
    16.             AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);
    17.             //IsAdvVisible = true;
    18.         }
    19.     }
     
    Last edited: Jul 6, 2012
  32. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Do you have a custom AndroidManifest.xml? If so, is it possible that i can see that one so i can rule out that it is something in there that is messing me up?
     
  33. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    In manifest we have
    Code (csharp):
    1. <activity android:name="com.company.product.BurstlyActivity"
    2.                   android:label="@string/app_name"
    3.                   android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    4.             <intent-filter>
    5.                 <action android:name="android.intent.action.MAIN" />
    6.                 <category android:name="android.intent.category.LAUNCHER" />
    7.             </intent-filter>   
    8.         </activity>
    and
    Code (csharp):
    1. <activity android:name="com.burstly.lib.component.networkcomponent.burstly.BurstlyFullscreenActivity"
    2.                   android:configChanges="keyboard|keyboardHidden|orientation"
    3.                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    4.         </activity>
    5.         <service android:name="com.medialets.advertising.AdManagerService">
    6.         </service>
    7.         <provider android:name="com.greystripe.android.sdk.AdContentProvider"
    8.                   android:authorities="com.company.product.AdContentProvider"
    9.                   android:multiprocess="true"
    10.                   android:exported="false" />
    11.         <activity android:name="com.greystripe.android.sdk.AdView"
    12.                   android:configChanges="keyboard|keyboardHidden|orientation">
    13.             <intent-filter>
    14.                 <category android:name="android.intent.category.LAUNCHER" />
    15.             </intent-filter>
    16.         </activity>
    17.         <activity android:name="com.google.ads.AdActivity"
    18.                   android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">
    19.         </activity>
    20.         <activity android:name="com.burstly.lib.component.networkcomponent.jumptap.JumptapActivity"
    21.                   android:configChanges="keyboard|keyboardHidden|orientation"
    22.                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    23.         </activity>
    24.         <activity android:name="com.millennialmedia.android.MMAdViewOverlayActivity"
    25.                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    26.                   android:configChanges="keyboardHidden|orientation|keyboard">
    27.         </activity>
    28.         <activity android:name="com.millennialmedia.android.VideoPlayer"
    29.                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    30.                   android:configChanges="keyboardHidden|orientation|keyboard">
    31.         </activity>
    32.         <activity android:name="com.inmobi.androidsdk.IMBrowserActivity"
    33.                   android:configChanges="keyboardHidden|orientation|keyboard">
    34.         </activity>
    35.         <activity android:name="com.vdopia.client.android.VDOActivity"
    36.                   android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
    37.                   android:screenOrientation="landscape"
    38.                   android:configChanges="orientation|keyboardHidden">
    39.         </activity>
    also
    Code (csharp):
    1. <uses-permission android:name="android.permission.INTERNET"/>
    2.         <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    3.         <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    4.         <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    5.         <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    6.         <uses-permission android:name="android.permission.VIBRATE"/>
    7.         <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    8.         <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    9.         <uses-permission android:name="android.permission.WAKE_LOCK"/>
    (replace company.product with you bundle id)
     
  34. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Much appreciated Agent_007. The "com.company.product.BurstlyActivity" should be bundle id, you mean the bundle id that is in the build settings in Unity?
     
  35. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    It is same you have set to BurstlyActivity.java, so if the file would start like
    Code (csharp):
    1. package com.mycompany.mygame;
    then you would use
    Code (csharp):
    1. <activity android:name="com.mycompany.mygame.BurstlyActivity"
     
  36. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    depending on what you're planning to do you can simply put <activity android:name=".BurstlyActivity"
    It worked with me until we got asked to do different builds with different bundle ids ;)
     
  37. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Thanks guys, you really are lifesavers! Going to try these things out now!
     
  38. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Seiko, i think you only have to put all the resources in the /Assets/Plugins/Android/ folder and Unity will pack them in the apk-file automatically. Seems to be working that way for me. That could make it a little easier for users coming to this thread, and not having to repack the apk and stuff.

    And i just saw my first ad! Thanks so much guys for the help and for sharing this hard work Seiko.
     
  39. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    Unity doesn't complain about .js files?
     
  40. SeikoTheWiz

    SeikoTheWiz

    Joined:
    Aug 1, 2011
    Posts:
    69
    it does complain here ;)
    But I still have them in unity to be able to build from several computer. (I renamed the .js without the extension and I put it back while copying the files in the jar)
     
  41. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    .js files? It can't really use any js files from there i guess. I haven't seen any issues with js files. I don't think i have any in there actually.
     
  42. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    You have to extract assets folder from BurstlySDK*.jar and manually add it to .apk, the assets folder contains images, .js files and config files. Without the config files the logcat will complain during startup.

    If you found out better way, please share =)
     
  43. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Well, i just copied the folders to the /Assets/Plugins/Android/ folder. And haven't had any complaints. I did get config file complaints in logs before doing this, but a simple copy to Unity was enough for me. Not getting any complains for js-files.

    EDIT: The resources should go in the /Assets/Plugins/Android/assets/ folder. Then no repackaging will have to be done. I didn't do any manual repack at all.
     
    Last edited: Jul 20, 2012
  44. davedx

    davedx

    Joined:
    Jul 18, 2012
    Posts:
    1
    Hi guys,

    I'm trying to use the apk re-signing approach, but I'm running into problems.

    In an experiment, all I'm doing is using the re-sign and zipalign code on an .apk file that I know installs.

    I then Bluetooth it to my phone (HTC Desire) and use Apk manager to try to install it, but it just says 'Install fails'. It works if I use the original .apk file instead. I guess using the Android SDK instead might give me more information about what's going wrong here? Which tool should I use?

    Edit: Nevermind, figured it out. You need to make sure you use the JDK1.6 for this to work. Unity somehow works with 1.7 but Android officially uses 1.6.
     
    Last edited: Jul 18, 2012
  45. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Did any of you ever do precaching for interstitials? I'm trying to implement the interstitials, but i'm guessing precaching is almost a must to not make the user upset.
     
  46. Agent_007

    Agent_007

    Joined:
    Dec 18, 2011
    Posts:
    899
    We are using .precacheAd() in both SetupView and onResume. But I don't know if it is possible to build better/perfect system with Unity GameObject+ManagerScript and SendMessage.
     
  47. Enzign

    Enzign

    Joined:
    Aug 20, 2010
    Posts:
    169
    Ok, thank you for the info. Might implement that. If i build something perfect i'll let you know. :)
     
  48. trickpirata

    trickpirata

    Joined:
    Jun 17, 2011
    Posts:
    12
    Okay there's some really odd things going on with my Burstly plugin. Everything is fine when I do an apk or a test run from ECLIPSE. But when I do a Build>Run in Unity, burstly can't seem to load its own config files! Here's my error:
    Code (csharp):
    1. 11-23 04:22:41.919: D/Burstly SDK v.Can not find property with key :sdk.version FeatureFactory(17849): 23-11-12 04:22:41:919 Initilizing feature factory completed.
    2. 11-23 04:22:41.969: D/Burstly SDK v.Can not find property with key :sdk.version JsonProcessorFactory(17849): 23-11-12 04:22:41:978 JSON Processor successfully instantiated for the Jackson library
    3. 11-23 04:22:41.979: D/dalvikvm(17849): GC_CONCURRENT freed 362K, 6% free 8188K/8647K, paused 1ms+2ms, total 21ms
    4. 11-23 04:22:41.989: D/Burstly SDK v.Can not find property with key :sdk.version CookieManager(17849): 23-11-12 04:22:41:992 Starting CookieManager initialization process...
    5. 11-23 04:22:42.159: D/dalvikvm(17849): GC_CONCURRENT freed 306K, 5% free 8364K/8775K, paused 12ms+13ms, total 49ms
    6. 11-23 04:22:42.179: D/Burstly SDK v.Can not find property with key :sdk.version SQLiteCookieStorage(17849): 23-11-12 04:22:42:184 Initialization completed.
    7. 11-23 04:22:42.179: D/Burstly SDK v.Can not find property with key :sdk.version SQLiteCookieStorage(17849): 23-11-12 04:22:42:186 Loading cookies from DB...
    8. 11-23 04:22:42.189: D/Burstly SDK v.Can not find property with key :sdk.version SQLiteCookieStorage(17849): 23-11-12 04:22:42:191 No saved cookies in DB.
    9. 11-23 04:22:42.189: D/Burstly SDK v.Can not find property with key :sdk.version MemoryCookieStorage(17849): 23-11-12 04:22:42:192 Initialization completed.
    10. 11-23 04:22:42.189: D/Burstly SDK v.Can not find property with key :sdk.version CookieManager(17849): 23-11-12 04:22:42:193 CookieManager initialization process has finished.
    11. 11-23 04:22:42.269: D/dalvikvm(17849): GC_CONCURRENT freed 390K, 6% free 8495K/9031K, paused 12ms+2ms, total 33ms
    12. 11-23 04:22:42.359: D/Burstly SDK v.Can not find property with key :sdk.version BurstlySdk(17849): 23-11-12 04:22:42:367 Burstly SDK was successfully initilaized.
    13. 11-23 04:22:42.429: D/dalvikvm(17849): GC_CONCURRENT freed 312K, 5% free 8716K/9159K, paused 16ms+16ms, total 57ms
    14. 11-23 04:22:42.549: D/dalvikvm(17849): GC_CONCURRENT freed 378K, 6% free 8788K/9287K, paused 12ms+11ms, total 44ms
    15. 11-23 04:22:42.669: D/dalvikvm(17849): GC_CONCURRENT freed 375K, 5% free 8984K/9415K, paused 13ms+2ms, total 45ms
    16. 11-23 04:22:42.729: D/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:730 TelephonyManager: deviceID - null
    17. 11-23 04:22:42.729: E/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:732 Device id is null.
    18. 11-23 04:22:42.729: D/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:736 Trying to get serial of 2.3+ device...
    19. 11-23 04:22:42.739: D/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:740 SERIAL: deviceID - C8OKAS042323
    20. 11-23 04:22:42.739: W/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:745 Current device id is null, could not encrypt id.
    21. 11-23 04:22:42.749: I/Burstly SDK v.Can not find property with key :sdk.version Utils(17849): 23-11-12 04:22:42:751 Secure.ANDROID_ID: andrdoidId - C8OKAS042323
    22. 11-23 04:22:42.759: D/dalvikvm(17849): GC_CONCURRENT freed 733K, 9% free 8687K/9543K, paused 1ms+2ms, total 24ms
    23. 11-23 04:22:42.769: D/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:773 Adding new recipient BurstlyViewSingleInstanceId
    24. 11-23 04:22:42.769: D/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:774 Working queue size 1
    25. 11-23 04:22:42.769: I/Burstly SDK v.Can not find property with key :sdk.version ObjectSaveLoadHandler(17849): 23-11-12 04:22:42:775 Could not obtain file to read last response!
    26. 11-23 04:22:42.769: D/Burstly Plugin(17849): Banner referenced and created
    27. 11-23 04:22:42.779: D/Burstly SDK v.Can not find property with key :sdk.version RequestManager(17849): 23-11-12 04:22:42:779 Network connected. Resuming autorefresh if any...
    28. 11-23 04:22:42.779: I/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:42:781 Can not continue. Burstly is paused or hidden.
    29. 11-23 04:22:42.779: D/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:779 Adding new recipient UriConstants
    30. 11-23 04:22:42.779: D/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:784 Working queue size 2
    31. 11-23 04:22:42.779: I/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:789 Running configuration for bannerBurstlyView
    32. 11-23 04:22:42.789: D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:42:790 Param pub from server: null
    33. 11-23 04:22:42.789: D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:42:791 Param zone from server: null
    34. 11-23 04:22:42.789: I/Burstly SDK v.Can not find property with key :sdk.version ServerConfigurationService(17849): 23-11-12 04:22:42:792 Running configuration for UriConstants
    35. 11-23 04:22:42.809: D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:42:812 viewDidChangeSize(new - w:0, h: 0, old - w:0, h: 0)
    36. 11-23 04:22:45.639: D/Burstly Plugin [Banner Status](17849): true
    37. 11-23 04:22:45.639: I/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:45:649 Sending new request to Can not find property with key :connect.singleAdHost with publisher id :'Fzv-dhgKUkie8t-CZJg6FA' and zone id : '0354996579063234248'...
    38. 11-23 04:22:45.639: I/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): [ 11-23 04:22:45.649 17849:17849 D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView INNER LISTENER ]23-11-12 04:22:45:650 startRequestToServer()
    39. 11-23 04:22:45.659: D/Burstly SDK v.Can not find property with key :sdk.version Preferences(17849): 23-11-12 04:22:45:665 Saving preferences for 'bannerBurstlyView' Burstly view
    40. 11-23 04:22:45.659: D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:45:667 bannerBurstlyView coming foreground...
    41. 11-23 04:22:45.669: D/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:45:668 Burstly view bannerBurstlyView has been resumed.
    42. 11-23 04:22:45.669: I/Burstly SDK v.Can not find property with key :sdk.version bannerBurstlyView(17849): 23-11-12 04:22:45:674 Scheduling refresh... Rerequest in 15,000 millis.
    43. 11-23 04:22:45.679: D/Burstly SDK v.Can not find property with key :sdk.version SafeAsyncTask(17849): 23-11-12 04:22:45:682 Custom uncaughtExceptionHandler has been set.
    44. 11-23 04:22:45.679: W/dalvikvm(17849): threadid=21: thread exiting with uncaught exception (group=0x419e0300)
    45. 11-23 04:22:45.679: W/dalvikvm(17849): [ 11-23 04:22:45.679 17849:17924 E/Burstly SDK v.Can not find property with key :sdk.version BackgroundUncaughtExceptionHandler23-11-12 04:22:45:684 Unexpected problem on thread AsyncTask #2: An error occured while executing doInBackground()
    46. 11-23 04:22:45.679: W/dalvikvm(17849): [ 11-23 04:22:45.689 17849:17924 E/Burstly SDK v.Can not find property with key :sdk.version BackgroundUncaughtExceptionHandler23-11-12 04:22:45:696 java.lang.RuntimeException: An error occured while executing doInBackground()
    47. 11-23 04:22:45.679: W/dalvikvm(17849):  at android.os.AsyncTask$3.done(AsyncTask.java:299)
    48. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    49. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    50. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    51. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    52. 11-23 04:22:45.679: W/dalvikvm(17849):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    53. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    54. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    55. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.lang.Thread.run(Thread.java:856)
    56. 11-23 04:22:45.679: W/dalvikvm(17849): Caused by: java.lang.IllegalArgumentException: Illegal character in scheme at index 0: Can not find property with key :connect.singleAdUri
    57. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.net.URI.create(URI.java:727)
    58. 11-23 04:22:45.679: W/dalvikvm(17849):  at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)
    59. 11-23 04:22:45.679: W/dalvikvm(17849):  at com.burstly.lib.network.request.AbortableAsyncTask.makeRequest(AbortableAsyncTask.java:331)
    60. 11-23 04:22:45.679: W/dalvikvm(17849):  at com.burstly.lib.network.request.AbortableAsyncTask.doInBackground(AbortableAsyncTask.java:479)
    61. 11-23 04:22:45.679: W/dalvikvm(17849):  at com.burstly.lib.network.request.BurstlyRequestTask.doInBackground(BurstlyRequestTask.java:134)
    62. 11-23 04:22:45.679: W/dalvikvm(17849):  at com.burstly.lib.network.request.BurstlyRequestTask.doInBackground(BurstlyRequestTask.java:48)
    63. 11-23 04:22:45.679: W/dalvikvm(17849):  at android.os.AsyncTask$2.call(AsyncTask.java:287)
    64. 11-23 04:22:45.679: W/dalvikvm(17849):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    65. 11-23 04:22:45.679: W/dalvikvm(17849):  ... 5 more
    I already included BurstlySDK.jar in Plugins\Android\ folder but no avail. Any help?

    EDIT:
    Yey! Got this thing working. I just extracted BurstlySDK.jar in Plugins\Android\ folder. Booyah!
     
    Last edited: Nov 22, 2012
  49. KTCN

    KTCN

    Joined:
    Jul 11, 2013
    Posts:
    1
    Hi pirata !

    I just encountered the same issue integrating the burstly android plugin. I wondered if you managed to solve this problem and if so could you tell me how to do it.
    Thank you very much !!
     
  50. trickpirata

    trickpirata

    Joined:
    Jun 17, 2011
    Posts:
    12
    Hey mate. Sorry for the super late reply. I just extracted the SDK into Plugins/Android folder. That's it!