From 071ef4aaff8b58447162b939a12d4f5137e73c9c Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 4 Jun 2019 14:00:50 +0800 Subject: [PATCH 1/4] =?UTF-8?q?Override=20removeDirectory=20function=20in?= =?UTF-8?q?=20FileUtilsAndroid=EF=BC=8Cuse=20JRE=20method=20instead=20of?= =?UTF-8?q?=20"rm=20-r=20path".=20Because=20We=20found=20that=20on=20OPPO'?= =?UTF-8?q?s=20ColorOS,=20the=20environment=20variable=20PATH=20may=20not?= =?UTF-8?q?=20always=20correct,=20it=20could=20be=20":/sbin"=20sometimes,?= =?UTF-8?q?=20then=20cause=20an=20error=20"rm=20not=20found",=20afterwards?= =?UTF-8?q?=20the=20directory=20could=20not=20be=20deleted=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/android/CCFileUtils-android.cpp | 9 +++++ cocos/platform/android/CCFileUtils-android.h | 2 ++ .../src/org/cocos2dx/lib/Cocos2dxHelper.java | 33 +++++++++++++++++++ .../Java_org_cocos2dx_lib_Cocos2dxHelper.cpp | 18 ++++++++++ .../Java_org_cocos2dx_lib_Cocos2dxHelper.h | 1 + 5 files changed, 63 insertions(+) diff --git a/cocos/platform/android/CCFileUtils-android.cpp b/cocos/platform/android/CCFileUtils-android.cpp index 5c7da21a7c91..62021d2b2bc5 100644 --- a/cocos/platform/android/CCFileUtils-android.cpp +++ b/cocos/platform/android/CCFileUtils-android.cpp @@ -344,6 +344,15 @@ std::vector FileUtilsAndroid::listFiles(const std::string& dirPath) return fileList; } +bool FileUtilsAndroid::removeDirectory(const std::string& path) const +{ + if (path.empty()) + return false; + + bool suc = removeDirectoryJNI(path.c_str()); + return suc; +} + 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..7d40603128f7 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[] childFile = file.listFiles(); + if (childFile == null || childFile.length == 0) { + file.delete(); + return; + } + for (File f : childFile) { + 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..a05d396ff45a 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(); From 844d76d038492c72ceca6967985e7c4593976f82 Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 4 Jun 2019 14:55:53 +0800 Subject: [PATCH 2/4] omitted variable while call removeDirectoryJNI --- cocos/platform/android/CCFileUtils-android.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cocos/platform/android/CCFileUtils-android.cpp b/cocos/platform/android/CCFileUtils-android.cpp index 62021d2b2bc5..c895288d4400 100644 --- a/cocos/platform/android/CCFileUtils-android.cpp +++ b/cocos/platform/android/CCFileUtils-android.cpp @@ -349,8 +349,7 @@ bool FileUtilsAndroid::removeDirectory(const std::string& path) const if (path.empty()) return false; - bool suc = removeDirectoryJNI(path.c_str()); - return suc; + return removeDirectoryJNI(path.c_str()); } FileUtils::Status FileUtilsAndroid::getContents(const std::string& filename, ResizableBuffer* buffer) const From 6c15db02846baaaca8f894189ae6fec92543e975 Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 4 Jun 2019 14:59:42 +0800 Subject: [PATCH 3/4] rename RemoveDirectory->renameDirectory obey the coding rule --- .../android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java | 8 ++++---- .../android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) 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 7d40603128f7..d14180b0e237 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java @@ -209,11 +209,11 @@ public boolean accept(File dir, String name) { } //remove directory - public static boolean RemoveDirectory(final String directory) + public static boolean removeDirectory(final String directory) { try{ File file = new File(directory); - RecursionDeleteFile(file); + recursionDeleteFile(file); return true; }catch(Exception ex){ ex.printStackTrace(); @@ -222,7 +222,7 @@ public static boolean RemoveDirectory(final String directory) } - private static void RecursionDeleteFile(File file) + private static void recursionDeleteFile(File file) { if (file.isFile()) { file.delete(); @@ -235,7 +235,7 @@ private static void RecursionDeleteFile(File file) return; } for (File f : childFile) { - RecursionDeleteFile(f); + recursionDeleteFile(f); } file.delete(); } 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 a05d396ff45a..7de22dc8d0a4 100644 --- a/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp +++ b/cocos/platform/android/jni/Java_org_cocos2dx_lib_Cocos2dxHelper.cpp @@ -159,7 +159,7 @@ void conversionEncodingJNI(const char* src, int byteSize, const char* fromCharse bool removeDirectoryJNI(const char* path) { JniMethodInfo methodInfo; - if (JniHelper::getStaticMethodInfo(methodInfo,className.c_str(),"RemoveDirectory","(Ljava/lang/String;)Z")) + 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); From 807d82a789432d6b4a52f7a7da2cff3adacaa652 Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 4 Jun 2019 15:05:01 +0800 Subject: [PATCH 4/4] rename childFile to childrenFile --- .../android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 d14180b0e237..f25b8c17d12f 100644 --- a/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java +++ b/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxHelper.java @@ -229,12 +229,12 @@ private static void recursionDeleteFile(File file) return; } if (file.isDirectory()) { - File[] childFile = file.listFiles(); - if (childFile == null || childFile.length == 0) { + File[] childrenFile = file.listFiles(); + if (childrenFile == null || childrenFile.length == 0) { file.delete(); return; } - for (File f : childFile) { + for (File f : childrenFile) { recursionDeleteFile(f); } file.delete();