How did Shadowgun reduced APK to 6 MB?

Discussion in 'Android Development' started by floky, Nov 9, 2011.

  1. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    Well after messing around too much today with trying to get another video player to work (http://forum.unity3d.com/threads/115885-Mobile-Movie-Texture) I gave up because of problems with audio sync. Which to be fair the was never promised. The good news from this testing is that in the digging into a solution, I found how to get the file descriptors out of the saved gameData.apk using the ZipResourceFile class that was introduced with the Android Expansion Files. Using this class, we should be able to redirect to the appropriate asset in the bundle easily without saving it outside of the gameData.apk. The problem is that I am going to need to REDO all of the work that the standard Unity media player does (and potentially more as I want to add hooks to control volume). However, that is my goal for tomorrow is to see if I can redo a good portion of the VideoPlayerActivity so that we can redirect the MediaPlayer to point to the correct dataAPK.
  2. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    I've found somebody that has an issue with the tool when using it with Mobclix and GoogleAdMobAdsSdk-4.1.1 android plugins.
    The app works just fine but it doesn't display any ads when using the build made with the tool.

    If he tries building it without the tool it displays the ads.

    Anyone had this kind of issue before?
  3. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    Ughh rewriting the video player is above my abilities at the moment.

    I think the best solution to get this streaming assets thing figured out is to, after the data files have been downloaded, to move the files out of the data.apk uncompressed into a file path on the file system (probably the external files directory). Using the ZipResourceFile we should be able to get the files out of the zip and save them to the file system. Since all the streaming assets are put into the APK/assets/ directory I think what I'd like to try to do is anything that is not a directory in that file path will be automatically saved to the external file path. What do you think?
  4. j.robichaud

    j.robichaud

    Member

    Joined:
    Aug 26, 2010
    Messages:
    31
    Have you considered using "jar:file://" + pathToDataApk + "!/assets" ? (Source: http://answers.unity3d.com/questions/126578/how-do-i-get-into-my-streamingassets-folder-from-t.html)

    We used that to load some arbitrary assets from the same apk(.txt and .jpg). Maybe it could work with streaming assets in another apk.

    http://unity3d.com/support/documentation/ScriptReference/Handheld.PlayFullScreenMovie.html

    "The first parameter, path, can be a network-based URL. The function will detect that by looking for a "://" substring that follows the protocol name."
    Last edited: Mar 9, 2012
  5. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    Uuuuuu!!! Nice tip jrobichaud ! That could work!!!
  6. j.robichaud

    j.robichaud

    Member

    Joined:
    Aug 26, 2010
    Messages:
    31
    I made a test project in the same APK
    WWW works
    But a video with an url won't. Could be a bug with unity, I submitted it to Unity.

    http://dl.dropbox.com/u/61797646/TestVideoPlayback.zip

    Let me know when you are done downloading the file, i'll remove it. (PM did not seem to work)
    Last edited: Mar 9, 2012
  7. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    Done! I will check it out. Keep me posted if Unity support answers something related to this possible bug.

    Thank you for your help!
  8. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    It took me a lot longer than it should have (still newish to android/java) but wrote something that moved all of the files out of the assets/ in the data in to the external storage directory that the InstallerUtils.getExternalStorageDir() uses. It looks like the only file that is in the assets/ is the stuff that was in the streaming assets folder so that should work. Then when you call the video you're going to need to change it with a #if UNITY_ANDROID and call it with the Application.getPersistentDataPath and that should point to the correct path. So it works, it just needs some cleanup.
    Last edited: Mar 10, 2012
  9. matrix211v1

    matrix211v1

    Member

    Joined:
    Jan 20, 2009
    Messages:
    156
    Great job Ferazel! Let me know if you need people to test it.
  10. j.robichaud

    j.robichaud

    Member

    Joined:
    Aug 26, 2010
    Messages:
    31
    Have you taken a look at the approach of using "jar:file://" + pathToDataApk + "!/assets" I mentionned above?
    It could work for WWW files.

    The videos could be extracted like you did.
  11. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    I would like to make an off-topic post on this thread (only once :p) and tell people about a very nice FREE Mac OS Mercurial GUI Client that I've found a few weeks ago and I really think it has a very big potential to be one of the best free solutions on this platform:
    http://jasonfharris.com/machg/

    If you work on a team based project and use Mercurial as a version control system please take the time to try this very very nice piece of software that I can already say it's very stable.

    And as I know how much effort and time a developer can put into making a project like this for free I have also donated a humble amount of money to support it's development further. So please if you've tried it and you would want to work with this client donate any amount of money to the developer to keep this project alive.

    Thank you for your patience reading this post!
  12. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    Hmm, I thought you said in your tests that it didn't work for video files so I didn't put much thought into it since that is the place where we were currently having problems. I ended up using the ZipFileResource class that Google released (as part of the marketplace expansion files) to access the zip/apk file and to get an input stream to the files inside the apk. Then it was a matter of putting it into another thread and to execute before starting the game for the first time, but after downloading.

    There are still some things that need to be done in order to polish it up. Mainly it needs hooks to dispatch messages back to the UI on the copying progress. Right now the code is executed inside of the "onGameStart()" but it should probably be done in its own method. Hopefully, these are going to be relatively minor updates to the code.

    Instead of copying the files out of the gameData.apk the other option was to separately host the files on the web server. Looking forward I think if this tool transitions to using the Google marketplace expansion files, the data files are most likely going to work similarly to how the gameData.apk is packaged currently. So I think this extraction solution is going to be more useful going forward. Then we can use Google to host all the video files that are going to be needed for the application and just extract the video files out of the expansion file APK.
  13. matrix211v1

    matrix211v1

    Member

    Joined:
    Jan 20, 2009
    Messages:
    156
    Any update on this?
  14. ratrodstudio

    ratrodstudio

    Member

    Joined:
    Apr 3, 2009
    Messages:
    211
    We are looking for a similar solution as well. We have an update that we need to submit asap and since we are now over the 50 megs are trying to figure this stuff out.
  15. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    I spent the majority of my time this past weekend working on the XAPK (expansion apk) installer sample that Google gives you to see if I could get it to work with the APK repackager. The installer sample is really robust and uses proper pausing, resuming, and provides a lot of stats about the download/verification process (which the current installer doesn't). The problem I had was that I could NOT get it to work due to the sample requiring API levels above 2.3 which was on the device I was testing and the sample was NOT properly handling calling stuff at that API level. With our release using 2.2, I kind of lost hope. :( So I shelved it, and I worked on another design implementation for the past couple days update instead of working on the installer for Android specifically.

    The only thing the current floky installer doesn't work of the box is the streaming assets. Is that the only thing that is holding you back from using the installer as is? Like I had mentioned earlier I did put together a very tacky solution for this that involved copying the assets out of the game data APK and into the external directory, which I tested on the device with some promising results.
  16. matrix211v1

    matrix211v1

    Member

    Joined:
    Jan 20, 2009
    Messages:
    156
    Yeap. I have 80mb of videos (not including the game itself) that obviously make it larger than the 50mb limit, as well as I am using 3.5 in a Windows environment and Flocky uses a Mac and 3.4.2
  17. ZowPac

    ZowPac

    New Member

    Joined:
    Sep 25, 2009
    Messages:
    58
    I was about to try adapting that sample code as well, but almost a quarter of our sales are on 2.2 still - did you happen to notice if the API requirement had to do with actually downloading and dealing with the file, or just some interface niceties?
  18. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    I'm still learning some basic fundamentals of Android programming and slugging my way through it. Like I stated earlier, my current priority is another design iteration cycle for my current project, so the Android installer has taken a backseat. However, I looked at the Android downloader sample last night again and I may have been wrong in regards to API levels being the problem with the downloader sample. They have some API checks for some classes and code paths so I figure I must not have been doing it right. I'm going to spend some more time with it this weekend to see if I can get some test deployments done of a sample project again.

    I think the manifest states the MIN sdk version is API 5 (2.0) so it should run on 2.2 still. Just that it uses some calls that I was concerned were crashing the app as they were showing up in the log.

    Obviously, if we can get the XAPK sample working somewhat decently that is going to be the way going forward. Not only will Google host the data and typically automatically download the data files automatically, it will also prevent the refund timer from activating until after the files have been downloaded. Just looking at the code the Google downloader sample that they give you is quite a bit more robust than the base installer that Floky provides with proper resume support as we as download stats (how fast, time remaining, etc.).

    If I can't get it working I will fallback to Floky's Android installer with some modifications because I've done some basic testing and I know that it works.

    Regardless, of which method you use, we are still going to need to use the APK repackager that is included with Floky's installer or something similar in order to repackage a data.apk. I don't do Unity development on a PC but from what I read about post build scripts this is most likely the reason that it isn't working on Windows. Someone is going to need to write their own UnityEditor script for building the app and repackaging the APK.

    I wish we didn't have to spend time doing this, but until Unity supports this style of build process natively, we're stuck figuring it out on our own.
  19. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    I haven't given up yet guys! :) Until Unity helps us, I'm working as we speak on the next release. After this release, my next target is modifying the build process to allow it to work with google's XAPK system and integrate their installer replacing mine.
    Trying my best to hurry this...got a lot on my head right now. :p

    Keep in touch!
  20. matei123

    matei123

    New Member

    Joined:
    Mar 15, 2012
    Messages:
    12
    Buna @flocky, am observat ca esti din Romania. As vrea te rog sa iti adresez niste intrebari despre cum as putea face cu aplicatile mai mari de 50 mb. Ma poti contacta te rog la adresa matteygiurgiu @ yahoo.com.
    Multumesc mult si pentru informatile care leai scris pe forum.
  21. lmbarns

    lmbarns

    Member

    Joined:
    Jul 14, 2011
    Messages:
    1,204
    Have you guys had any luck with Google Play's APK expansion files??? Says you can load 2 additional apk files up to 2 Gigs!! http://developer.android.com/guide/market/expansion-files.html

  22. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    Hi guys,

    I've been trying these past few days to fix the issue with the android VideoPlayer from Unity not being able to access the videos from the StreamingAssets folder. To easily solve this I would just have to extend the VideoPlayer from Unity and override the package path where it will look for the files. But this is not possible because they've hardcoded the starting of the VideoPlayer activity to only use the VideoPlayer.class object.
    This is the decompiled code from the Unity android classes that starts the video activity:
    Code (csharp):
    1.  
    2.   protected void showVideoPlayer(String paramString, int paramInt1, int paramInt2, int paramInt3, boolean paramBoolean)
    3.   {
    4.     Intent localIntent;
    5.     [B](localIntent = new Intent(this.g, VideoPlayer.class)).putExtra("fileName", paramString);[/B]
    6.     localIntent.putExtra("backgroundColor", paramInt1);
    7.     localIntent.putExtra("controlMode", paramInt2);
    8.     localIntent.putExtra("scalingMode", paramInt3);
    9.     localIntent.putExtra("isURL", paramBoolean);
    10.     if ((this.g instanceof Activity))
    11.     {
    12.       paramString = (Activity)this.g;
    13.       localIntent.putExtra("screenOrientation", paramString.getRequestedOrientation());
    14.       localIntent.putExtra("autorotationOn", nativeIsAutorotationOn());
    15.     }
    16.     else
    17.     {
    18.       localIntent.putExtra("screenOrientation", 1);
    19.       localIntent.putExtra("autorotationOn", false);
    20.     }
    21.     localIntent.putExtra("wakeLock", hasWakeLock());
    22.     localIntent.addFlags(65536);
    23.     a(new Runnable(localIntent)
    24.     {
    25.       public final void run()
    26.       {
    27.         UnityPlayer.m(UnityPlayer.this).startActivity(this.a);
    28.       }
    29.     });
    30.   }
    31.  
    So the hard-coded class object uses is here:
    Code (csharp):
    1. (localIntent = new Intent(this.g, VideoPlayer.class)).putExtra("fileName", paramString);
    The only "cleaner" way to solve this is somehow make VidePlayer.class to point to an extended VideoPlayer activity. But how?!
    Another more ugly solution is to decompile it, modify so it take a string param as the targeted class name and get the Class object
    using Class.forName( nameOfVideoActivityClass) so it will be something like this:
    Code (csharp):
    1. (localIntent = new Intent(this.g, Class.forName(videoPlayerActivityClass))).putExtra("fileName", paramString);
    Can someone tell Unity to stop hard-coding stuff that would be required to be extended / overridden by the user? :D
  23. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    I've been keeping a close eye on this thread as this is something I'm going to have to tackle myself in the coming days. It's not something I'm looking forward to to be honest.

    Anyway, I noticed this in unity feedback
    http://feedback.unity3d.com/forums/...ndroid-apk-file-split-for-apps-with-size-50mb
    It's only got a few votes, it would be great if it got more.

    Obviously this isn't going to help in the short term but perhaps Unity will take note.
  24. buffonomics

    buffonomics

    New Member

    Joined:
    Jun 10, 2009
    Messages:
    59
  25. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    This tool seems like it could be very useful so far. I've managed to get as far as the tool splitting the apk into two*.

    However I am having quite a bit of difficulty testing, I don't wish to download the apk but manually copy it across to make the installer think i've already downloaded it but it seems to insist on trying to download it.
    *edit* After some fiddling and few code changes I managed to fool the installer into thinking it had downloaded the gameData.apk. And the game ran. Amazing!

    Thanks for the work Floky, really appreciated.

    Right... now I just have to modify everything to try and make it work with Google's new XAPK... joy!


    *
    I did have some difficulty to note:
    PostprocessBuildPlayer does not seem to work with Windows, there are several thread/posts about this but no apparent solution, I had to revert to using a Mac to get this working.
    Last edited: Mar 20, 2012
  26. j.robichaud

    j.robichaud

    Member

    Joined:
    Aug 26, 2010
    Messages:
    31
    Most of the time we avoid using "PostprocessBuildPlayer" and instead we call the commands from Unity using "System.Diagnostics.Process" just after calling BuildPipeline.BuildPlayer. This is the best workaround we found.
  27. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    I think I may have something with XAPKs but it is definitely not for mass consumption. Using Floky's APK repackager it will make a build and split the APK. It will download the XAPK from Google's servers, and it will copy the streaming assets out of the .apk so that the default Unity VideoPlayer can play them. This code was based on the sample that Google provided for its downloader. I'm not really sure if I could provide this code, but I could probably help anyone else who is running into problems with it. The downside to this method is that in order to get applications to get separate texture compressions you're going to need to upload and build multiple APKs with different XAPK data files for the various texture compression formats. The entire process is very very error prone.
  28. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    Farazel,
    Did you use Google's market licensing and market apk expansion libraries? I'm having difficulty integrating them into the Unity project so that I can use them. I can't seem to import them correctly, what steps did you take?
  29. j.robichaud

    j.robichaud

    Member

    Joined:
    Aug 26, 2010
    Messages:
    31
    I am interested to take a look at it if possible.
  30. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    I'll ask here in the hope any of you can help with the problem I sated above (importing the Google Market Apk Expansion package).
    I've followed the steps on the Android dev guide and created two eclipse projects from the source code supplied for Google Market Apk Expansion package and Google Market Licensing package.

    However, since I don't have an eclipse project for my Unity project I'm unsure how to add them as a library. So what I tried was exporting the src into a .jar file and adding that to my Assets\Plugins\Android\libs folder. Now the strange thing is this seems to have partly worked, which is what confuses me. Under the Google Market Apk Expansion package there are src files under com.google.android.vending.expansion.downloader and under com.google.android.vending.expansion.downloader.impl.

    In my java files I'm creating for Unity I can successfully import files from com.google.android.vending.expansion.downloader but not from com.google.android.vending.expansion.downloader.impl. That's what I don't understand as they should both be under the same .jar file. If it can find one why can't it find the other?

    *edit*
    Oh I should say I also tried to add them to default.properties for Ant to build them (that's how I build my Unity Android files), but that didn't work.
  31. Ferazel

    Ferazel

    Member

    Joined:
    Apr 18, 2010
    Messages:
    177
    To start with, what I ended up doing was downloading just the vanilla sample code from Google. It took me a very long time to figure out how to add projects as libraries to the actual sample project (it's the android option under build path, not through the build-path libraries). Then I was able to get the base application to download the file that I setup for my dummy marketplace app from running in eclipse, however it obviously won't launch the unity player activity properly. However, this is the first part of just understanding everything in the code.

    After I got that setup, I ended up needing to combine everything into one code package (you need to do some copy and pasting of resources to make one set of resources) and importing the correct .R file in the various sources. As I was having some discover issues, I also named the primary package where my activity and service are defined the same as the package in the manifest.xml file. After doing that I was able to setup a project as a library project (in the project.properties as there are some issues compiling the code as an App due to some javax.security links that are not allowed on Android devices). After getting all of the packages under one src directory, I perform a export on the src directory as a .jar file similar to how the Floky installer works currently as a plug in into my Unity project Plugins/Android folder.

    I encountered other issues along the way and I'm still trying to correctly terminate the downloader service when I start the UnityPlayerActivity (I'm having troubles finding which intent I need to hang on to so I can terminate the service properly). Anyways, it's still a rough start, but with a lot of work and trial and error it seems to be working. I tested it with my 200MB project last night and it downloaded and played the movies correctly.
    Last edited: Mar 21, 2012
  32. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    Gah!
    I had "export class files with compile warnings" unchecked. Which means certain classes were not exported in the jar file because the Google libraries come with warnings!
  33. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    Floky, (or anybody else)
    I'm trying to change your AndroidBuilder code so that it'll get the Android SDK in Windows (the code is only written for MAC) but I can't compile your source files. I get lots of compile errors to do with jdesktop.

    *edit*
    I got everything compiling by using NetBeans and opening existing project located in Floky's download.
    *end edit*

    Anyone successfully got this tool working with Windows?

    @jrobichaud, thanks for the tip, I *had* managed to call Floky's tool from within Unity but with the new .jar file I've compiled it won't run (failed to launch error) even though it runs from NetBeans OK.
    Last edited: Mar 22, 2012
  34. Insomniac

    Insomniac

    New Member

    Joined:
    Mar 22, 2012
    Messages:
    1
    Would also be interested in a Windows version of the tool also ... just started porting a fairly large size game to Android and run into the problem of the 50Mb (30Mb Samsung) limit.
    From what I understand and please correct me if I am wrong but the approach in this forum and what others have done is to:
    1. Take the Downloader and License Libraries from Google and create two jar files to add to Assets/Plugins/Android folder of Unity project
    2. Use these libraries to check if the expansion file exists, if not then download them via Google Play Marketplace again with those libs
    3. An expansion file is in a sense one large AssetBundle which is then read using WWW.LoadFromCacheOrDownload with the location on the SD card

    Sorry if I have completely lost the plot but after 12 pages on this forum and a load of video stuff interlaced I think I melted the last working part of my brain.

    Gotta say though great group of people helping each other out here ... well impressed compared to other forums.
  35. buffonomics

    buffonomics

    New Member

    Joined:
    Jun 10, 2009
    Messages:
    59
    I woulda been even more active on this thread if our game was ready to be released, especially on the Windows side.
    Who knows maybe by that time Unity woulda solved this issue :p
  36. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    I will start working on the windows version if that is a big request from everybody. I've been very busy with work lately. Sry for the lack activity and feedback. I'm still here though. :) I've been working on finding a much better fix for the videos playing issue by using a 3rd party video player that seems much more better equipped:
    http://vov.io/vitamio/

    But didn't finish working on it yet. :(

    If anybody already wants to go ahead and plug in this player in the installer and give it a spin because i'm moving a bit slow with the development...
    Last edited: Mar 22, 2012
  37. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    I'm working on a Windows version with the Google Libraries, if I get it working I will see if I can upload at least some code to help you guys.

    Anyway, you're almost there but not quite. The steps I'm taking are:
    1. Modifying Floky's tool to work in Windows and to not use Floky's installer, so that all it does is split the APK.
    2. Creating my own downloader using the Google Libraries and Google sample code. This also involves modifying the manifest file to launch this activity first rather than the Unity one.
    3. Create my own UnityLauncherActivity that extends UnityPlayerActivity and overrides getPackageCodePath() to point to where Google downloads the expansion file.

    I certainly hope those steps will work. I have to say I'm amazed that Unity doesn't have something for this, asset bundles is not really suitable for this task.
  38. HazeTI

    HazeTI

    New Member

    Joined:
    Jan 12, 2012
    Messages:
    83
    Floky, you may be able to help me. In modifying your Builder code to only split the APK into two new separate APKs, without taking into account your installer it looks like all I really had to do was skip step 2 (Copying Installer Android resources folder to the StagingArea). But now i'm stuck at Generating the DEX file, it would not be able to find <toolspath>/dx but continue with the remaining steps, effectively skipping this step. I fixed that by specifically pointing to "dx.bat" rather than just "dx" but now it just hangs when generating the DEX file. No crash, it's still running but it is stuck in some infinite loop.

    Any ideas?

    <edit>
    Hmm, ok, so I reverted all my changes and instead selected my install res folder as my unity one in your tool and it still hangs when generating DEX file!

    <edit2>
    So I fixed that issue, turns out the folders I was supplying were incorrect (my stupid mistake). So now the tool runs ok but when I try to launch, on switching to the unity activity I crash with
    java.lang.UnsatisfiedLinkError: Couldn't load mono: findLibrary returned null
    Last edited: Mar 23, 2012
  39. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
    Hi HazeTI, it's very difficult to help you without some more feedback.
    If it crashes there, you might not have the Unity binary libs in both APK files (installer and gamedata file). Use the mac version of the tool to build 2 working APK files (installer + gamedata) and decompress them to see what's missing from your modified version of the tool.
  40. floky

    floky

    Member

    Joined:
    Oct 6, 2010
    Messages:
    217
  41. Abza1989

    Abza1989

    Member

    Joined:
    Jul 17, 2012
    Messages:
    47
    Hi Guys

    If anyone got this Tool working with Unity 3.5.2 can you please post a tutorial on how to set this tool up and get it working. My game is 89MB in size and i have tried splitting them and it has worked but then when i open the installer.apk it stops and closes the app.

    Help plz!
    Abz
  42. smartkiran

    smartkiran

    New Member

    Joined:
    Mar 28, 2013
    Messages:
    10
    Hi Abza,

    I just wrote a small tutorial on how to do this with unity 3.x on windows. Here is the link
  43. _creatio_

    _creatio_

    Member

    Joined:
    Mar 21, 2013
    Messages:
    10
    Hello guys,
    I'm just curious if the provided by Floky solution is needed with Unity 4.x or a new Unity feature "Split Application Binary" can solve the problem without any additional efforts? As far as I understood it doesn't provide a way to decide what resource package to download for the current users hardware (tegra, powerVR, ...) or is it can be configured during a google play publishing procedure?

    I tried to integrate it with Unity 4.x but the Android Builder Tool launched at build time is not happy with my Android SDK Root Path.
    The message is:
    "Unity Android SDK Root Path hasn't been set! The build process can't continue!!!
    Quit, setup Unity Android Sdk root path, make sure you have the latest Android API installed and try building again."

    It's strange as I got it configured and Unity can build and run APKs on my device.

    Please help!
  44. LionTR

    LionTR

    Member

    Joined:
    Mar 26, 2010
    Messages:
    32
    This sounds good, but
    1. You forgot to mention that it has nothing to do with the plugin that this topic is about
    2. If you got a lot of assets in the Resources folder, your solution doesn't help, because the initial app will contain it and will be still too large.