diff --git a/cocos/platform/android/CCFileUtils-android.cpp b/cocos/platform/android/CCFileUtils-android.cpp index 5c7da21a7c91..c895288d4400 100644 --- a/cocos/platform/android/CCFileUtils-android.cpp +++ b/cocos/platform/android/CCFileUtils-android.cpp @@ -344,6 +344,14 @@ std::vector FileUtilsAndroid::listFiles(const std::string& dirPath) return fileList; } +bool FileUtilsAndroid::removeDirectory(const std::string& path) const +{ + if (path.empty()) + return false; + + return removeDirectoryJNI(path.c_str()); +} + FileUtils::Status FileUtilsAndroid::getContents(const std::string& filename, ResizableBuffer* buffer) const { static const std::string apkprefix("assets/"); diff --git a/cocos/platform/android/CCFileUtils-android.h b/cocos/platform/android/CCFileUtils-android.h index 2153199b18ef..601e799b01f4 100644 --- a/cocos/platform/android/CCFileUtils-android.h +++ b/cocos/platform/android/CCFileUtils-android.h @@ -76,6 +76,8 @@ class CC_DLL FileUtilsAndroid : public FileUtils virtual long getFileSize(const std::string& filepath) const override; virtual std::vector listFiles(const std::string& dirPath) const override; + + virtual bool removeDirectory(const std::string& dirPath) const override; private: virtual bool isFileExistInternal(const std::string& strFilePath) const override; virtual bool isDirectoryExistInternal(const std::string& dirPath) const override; 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 a86c566a2585..f25b8c17d12f 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java @@ -207,6 +207,39 @@ public boolean accept(File dir, String name) { return Cocos2dxHelper.sAssetsPath; } + + //remove directory + public static boolean removeDirectory(final String directory) + { + try{ + File file = new File(directory); + recursionDeleteFile(file); + return true; + }catch(Exception ex){ + ex.printStackTrace(); + return false; + } + } + + + private static void recursionDeleteFile(File file) + { + if (file.isFile()) { + file.delete(); + return; + } + if (file.isDirectory()) { + File[] childrenFile = file.listFiles(); + if (childrenFile == null || childrenFile.length == 0) { + file.delete(); + return; + } + for (File f : childrenFile) { + recursionDeleteFile(f); + } + file.delete(); + } + } public static ZipResourceFile getObbFile() { if (null == sOBBFile) { diff --git a/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp b/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp index c2cc9ed5257f..7de22dc8d0a4 100644 --- a/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp +++ b/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp @@ -154,3 +154,21 @@ void conversionEncodingJNI(const char* src, int byteSize, const char* fromCharse methodInfo.env->DeleteLocalRef(methodInfo.classID); } } + + +bool removeDirectoryJNI(const char* path) +{ + JniMethodInfo methodInfo; + if (JniHelper::getStaticMethodInfo(methodInfo,className.c_str(),"removeDirectory","(Ljava/lang/String;)Z")) + { + jstring stringArgPath = methodInfo.env->NewStringUTF(path); + jboolean suc = methodInfo.env->CallStaticBooleanMethod(methodInfo.classID,methodInfo.methodID,stringArgPath); + + methodInfo.env->DeleteLocalRef(methodInfo.classID); + methodInfo.env->DeleteLocalRef(stringArgPath); + + return suc; + } + + return false; +} \ No newline at end of file diff --git a/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h b/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h index ef146c2f6094..18c4f6b2d556 100644 --- a/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h +++ b/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.h @@ -34,6 +34,7 @@ extern const char * getApkPath(); extern std::string getPackageNameJNI(); extern int getObbAssetFileDescriptorJNI(const char* path, long* startOffset, long* size); extern void conversionEncodingJNI(const char* src, int byteSize, const char* fromCharset, char* dst, const char* newCharset); +extern bool removeDirectoryJNI(const char* path); extern int getDeviceSampleRate(); extern int getDeviceAudioBufferSizeInFrames();