diff --git a/android/Android.mk b/android/Android.mk index 08728da5f..947ca5490 100644 --- a/android/Android.mk +++ b/android/Android.mk @@ -162,6 +162,8 @@ LOCAL_CFLAGS := -I../lib/angelscript/include \ -DUSE_GLES2 \ -DHAVE_OGGVORBIS \ -DNDEBUG \ + -DANDROID_PACKAGE_NAME=\"$(PACKAGE_NAME)\" \ + -DANDROID_APP_DIR_NAME=\"$(APP_DIR_NAME)\" \ -std=gnu++0x LOCAL_STATIC_LIBRARIES := irrlicht bullet enet freetype ifaddrs angelscript \ diff --git a/android/make.sh b/android/make.sh index 7fac9f3c6..7981d9f81 100755 --- a/android/make.sh +++ b/android/make.sh @@ -40,6 +40,8 @@ export APP_NAME_RELEASE="SuperTuxKart" export APP_NAME_DEBUG="SuperTuxKart Debug" export PACKAGE_NAME_RELEASE="org.supertuxkart.stk" export PACKAGE_NAME_DEBUG="org.supertuxkart.stk_dev" +export APP_DIR_NAME_RELEASE="supertuxkart" +export APP_DIR_NAME_DEBUG="supertuxkart-dbg" export APP_ICON_RELEASE="$DIRNAME/icon.png" export APP_ICON_DEBUG="$DIRNAME/icon-dbg.png" @@ -118,6 +120,7 @@ if [ "$BUILD_TYPE" = "debug" ] || [ "$BUILD_TYPE" = "Debug" ]; then export IS_DEBUG_BUILD=1 export APP_NAME="$APP_NAME_DEBUG" export PACKAGE_NAME="$PACKAGE_NAME_DEBUG" + export APP_DIR_NAME="$APP_DIR_NAME_DEBUG" export APP_ICON="$APP_ICON_DEBUG" elif [ "$BUILD_TYPE" = "release" ] || [ "$BUILD_TYPE" = "Release" ]; then export ANT_BUILD_TYPE="release" @@ -125,6 +128,7 @@ elif [ "$BUILD_TYPE" = "release" ] || [ "$BUILD_TYPE" = "Release" ]; then export IS_DEBUG_BUILD=0 export APP_NAME="$APP_NAME_RELEASE" export PACKAGE_NAME="$PACKAGE_NAME_RELEASE" + export APP_DIR_NAME="$APP_DIR_NAME_RELEASE" export APP_ICON="$APP_ICON_RELEASE" else echo "Unsupported BUILD_TYPE: $BUILD_TYPE. Possible values are: " \ diff --git a/src/io/assets_android.cpp b/src/io/assets_android.cpp index f8de5c8a0..e2964d4d7 100644 --- a/src/io/assets_android.cpp +++ b/src/io/assets_android.cpp @@ -73,22 +73,32 @@ void AssetsAndroid::init() paths.push_back("/sdcard/"); paths.push_back("/storage/sdcard0/"); paths.push_back("/storage/sdcard1/"); - paths.push_back("/data/data/org.supertuxkart.stk/files/"); + +#if !defined(ANDROID_PACKAGE_NAME) || !defined(ANDROID_APP_DIR_NAME) + #error +#endif + + std::string package_name = ANDROID_PACKAGE_NAME; + paths.push_back("/data/data/" + package_name + "/files/"); + + std::string app_dir_name = ANDROID_APP_DIR_NAME; // Check if STK data for current version is available somewhere for (std::string path : paths) { Log::info("AssetsAndroid", "Check data files in: %s", path.c_str()); - if (m_file_manager->fileExists(path + "/stk/data/" + version)) + if (m_file_manager->fileExists(path + "/" + app_dir_name + "/data/" + version)) { - m_stk_dir = path + "/stk"; + m_stk_dir = path + "/" + app_dir_name; break; } - - if (m_file_manager->fileExists(path + "/supertuxkart/data/" + version)) + + // Stk is an alias of supertuxkart for compatibility with older version. + if (app_dir_name == "supertuxkart" && + m_file_manager->fileExists(path + "/stk/data/" + version)) { - m_stk_dir = path + "/supertuxkart"; + m_stk_dir = path + "/stk"; break; } } @@ -103,16 +113,18 @@ void AssetsAndroid::init() Log::info("AssetsAndroid", "Check data files for different STK " "version in: %s", path.c_str()); - if (m_file_manager->fileExists(path + "/stk/.extracted")) + if (m_file_manager->fileExists(path + "/" + app_dir_name + "/.extracted")) { - m_stk_dir = path + "/stk"; + m_stk_dir = path + "/" + app_dir_name; needs_extract_data = true; break; } - if (m_file_manager->fileExists(path + "/supertuxkart/.extracted")) + // Stk is an alias of supertuxkart for compatibility with older version. + if (app_dir_name == "supertuxkart" && + m_file_manager->fileExists(path + "/stk/.extracted")) { - m_stk_dir = path + "/supertuxkart"; + m_stk_dir = path + "/stk"; needs_extract_data = true; break; } @@ -132,12 +144,12 @@ void AssetsAndroid::init() if (preferred_path.length() > 0) { - if (m_file_manager->checkAndCreateDirectoryP(preferred_path + - "/stk/data")) + if (m_file_manager->checkAndCreateDirectoryP(preferred_path + "/" + + app_dir_name + "/data")) { Log::info("AssetsAndroid", "Data directory created in: %s", preferred_path.c_str()); - m_stk_dir = preferred_path + "/stk"; + m_stk_dir = preferred_path + "/" + app_dir_name; needs_extract_data = true; } } @@ -149,11 +161,12 @@ void AssetsAndroid::init() { for (std::string path : paths) { - if (m_file_manager->checkAndCreateDirectoryP(path + "/stk/data")) + if (m_file_manager->checkAndCreateDirectoryP(path + "/" + + app_dir_name + "/data")) { Log::info("AssetsAndroid", "Data directory created in: %s", path.c_str()); - m_stk_dir = path + "/stk"; + m_stk_dir = path + "/" + app_dir_name; needs_extract_data = true; break; } @@ -415,10 +428,12 @@ void AssetsAndroid::removeData() #ifdef ANDROID if (m_stk_dir.length() == 0) return; + + std::string app_dir_name = ANDROID_APP_DIR_NAME; // Make sure that we are not accidentally removing wrong directory - if (m_stk_dir.find("/stk") == std::string::npos && - m_stk_dir.find("/supertuxkart") == std::string::npos) + if (m_stk_dir.find("/" + app_dir_name) == std::string::npos && + m_stk_dir.find("/stk") == std::string::npos) { Log::error("AssetsAndroid", "Invalid data directory: %s", m_stk_dir.c_str());