diff --git a/cocos/platform/CCFileUtils.h b/cocos/platform/CCFileUtils.h index 41ec113..b3d4c28 100644 --- a/cocos/platform/CCFileUtils.h +++ b/cocos/platform/CCFileUtils.h @@ -459,6 +459,8 @@ public: */ virtual std::string getWritablePath() const = 0; + virtual std::string getExtFileDirectory() const = 0; + /** * Sets writable path. */ diff --git a/cocos/platform/android/CCFileUtils-android.cpp b/cocos/platform/android/CCFileUtils-android.cpp index c571454..6941fb8 100644 --- a/cocos/platform/android/CCFileUtils-android.cpp +++ b/cocos/platform/android/CCFileUtils-android.cpp @@ -328,6 +328,25 @@ std::string FileUtilsAndroid::getWritablePath() const } } +std::string FileUtilsAndroid::getExtFileDirectory() const +{ + // Fix for Nexus 10 (Android 4.2 multi-user environment) + // the path is retrieved through Java Context.getCacheDir() method + std::string dir(""); + std::string tmp = JniHelper::callStaticStringMethod(JCLS_HELPER, "getExtFileDirectory"); + + if (tmp.length() > 0) + { + dir.append(tmp).append("/"); + + return dir; + } + else + { + return ""; + } +} + NS_CC_END #endif // CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID diff --git a/cocos/platform/android/CCFileUtils-android.h b/cocos/platform/android/CCFileUtils-android.h index d50bb11..10ad49f 100644 --- a/cocos/platform/android/CCFileUtils-android.h +++ b/cocos/platform/android/CCFileUtils-android.h @@ -70,6 +70,7 @@ public: virtual FileUtils::Status getContents(const std::string& filename, ResizableBuffer* buffer) override; virtual std::string getWritablePath() const override; + virtual std::string getExtFileDirectory() const override; virtual bool isAbsolutePath(const std::string& strPath) const override; private: diff --git a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java index 31fdf24..b428cc3 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java @@ -83,6 +83,7 @@ public class Cocos2dxHelper { private static boolean sActivityVisible; private static String sPackageName; private static String sFileDirectory; + private static String sExtFileDirectory; private static Activity sActivity = null; private static Cocos2dxHelperListener sCocos2dxHelperListener; private static Set onActivityResultListeners = new LinkedHashSet(); @@ -205,8 +206,8 @@ public class Cocos2dxHelper { final ApplicationInfo applicationInfo = activity.getApplicationInfo(); Cocos2dxHelper.sPackageName = applicationInfo.packageName; - Cocos2dxHelper.sFileDirectory = activity.getExternalFilesDir("luaframework").getAbsolutePath(); -// Cocos2dxHelper.sFileDirectory = activity.getFilesDir().getAbsolutePath(); + Cocos2dxHelper.sExtFileDirectory = activity.getExternalFilesDir(null).getAbsolutePath(); + Cocos2dxHelper.sFileDirectory = activity.getFilesDir().getAbsolutePath(); Cocos2dxHelper.nativeSetApkPath(Cocos2dxHelper.getAssetsPath()); @@ -300,6 +301,9 @@ public class Cocos2dxHelper { public static String getWritablePath() { return Cocos2dxHelper.sFileDirectory; } + public static String getExtFileDirectory() { + return Cocos2dxHelper.sExtFileDirectory; + } public static String getCurrentLanguage() { return Locale.getDefault().getLanguage(); diff --git a/cocos/scripting/js-bindings/manual/jsb_global.cpp b/cocos/scripting/js-bindings/manual/jsb_global.cpp index 6d6e9bc..4298a44 100644 --- a/cocos/scripting/js-bindings/manual/jsb_global.cpp +++ b/cocos/scripting/js-bindings/manual/jsb_global.cpp @@ -232,7 +232,11 @@ void jsb_init_file_operation_delegate() se::ScriptEngine::getInstance()->setFileOperationDelegate(delegate); } std::string path = FileUtils::getInstance()->getWritablePath(); + std::string extPath = FileUtils::getInstance()->getExtFileDirectory(); + extPath += "luaframework/"; + path += "luaframework/"; std::vector searchPaths; + searchPaths.push_back(extPath); searchPaths.push_back(path); searchPaths.push_back(""); FileUtils::getInstance()->setSearchPaths(searchPaths);