diff --git a/android/generate_assets.sh b/android/generate_assets.sh index 7addb4acb..4a9adea89 100755 --- a/android/generate_assets.sh +++ b/android/generate_assets.sh @@ -664,6 +664,9 @@ find assets/* -type d | sort > assets/directories.txt sed -i s/'.\/assets\/'// assets/directories.txt sed -i s/'assets\/'// assets/directories.txt +# A file that can be used to check if apk has assets +echo "has_assets" > assets/has_assets.txt + # It will be probably ignored by ant, but create it anyway... touch assets/.nomedia diff --git a/src/io/assets_android.cpp b/src/io/assets_android.cpp index 178543e00..751af6d27 100644 --- a/src/io/assets_android.cpp +++ b/src/io/assets_android.cpp @@ -231,17 +231,21 @@ void AssetsAndroid::init() { m_progress_bar = new ProgressBarAndroid(); m_progress_bar->draw(0.01f); + + if (hasAssets()) + { + removeData(); + extractData(); - removeData(); - extractData(); + if (!m_file_manager->fileExists(m_stk_dir + "/.extracted")) + { + Log::fatal("AssetsAndroid", "Fatal error: Assets were not " + "extracted properly"); + } + } delete m_progress_bar; - if (!m_file_manager->fileExists(m_stk_dir + "/.extracted")) - { - Log::fatal("AssetsAndroid", "Fatal error: Assets were not " - "extracted properly"); - } } #endif @@ -525,6 +529,32 @@ void AssetsAndroid::removeData() #endif } +//----------------------------------------------------------------------------- +/** A function that checks if assets are included in the package + * \return true if apk has assets + */ +bool AssetsAndroid::hasAssets() +{ +#ifdef ANDROID + AAssetManager* amgr = global_android_app->activity->assetManager; + + AAsset* asset = AAssetManager_open(amgr, "has_assets.txt", + AASSET_MODE_STREAMING); + + if (asset == NULL) + { + Log::info("AssetsAndroid", "Package doesn't have assets"); + return false; + } + + Log::info("AssetsAndroid", "Package has assets"); + AAsset_close(asset); + return true; +#endif + + return false; +} + //----------------------------------------------------------------------------- /** A function that creates empty file * \param path A path to the file that should be created diff --git a/src/io/assets_android.hpp b/src/io/assets_android.hpp index 72b107538..842547ee7 100644 --- a/src/io/assets_android.hpp +++ b/src/io/assets_android.hpp @@ -33,6 +33,7 @@ private: void extractData(); bool extractDir(std::string dir_name); void removeData(); + bool hasAssets(); void touchFile(std::string path); bool isWritable(std::string path); std::string getPreferredPath(const std::vector& paths);