diff --git a/README-CN.md b/README-CN.md index fcebb2e07422908850282f682d0132273f18c8e5..695224c46184f8e9f9ca331f66978271508a890b 100644 --- a/README-CN.md +++ b/README-CN.md @@ -41,7 +41,7 @@ [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.10-brightgreen.svg +[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.11-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index 2d8f4fe136087f9a09c42d6ff16cb3f0b86e2fb9..dcd0848ce438c8ad600e7a461108a3c97c7e8a7d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If this project helps you a lot and you want to support the project's developmen [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.10-brightgreen.svg +[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.13.11-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/app/build.gradle b/app/build.gradle index 2bb46621ce14c8cc44925a9eb23e5e79fd547f7e..497c0e568132bd937a26efce5c25496cb83d5ac6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,7 +60,7 @@ dependencies { // LeakCanary debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakcanary_version" releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version" -// implementation 'com.blankj:utilcode:1.13.10' +// implementation 'com.blankj:utilcode:1.13.11' } diff --git a/build.gradle b/build.gradle index f8d83fa81e463a7432988a8a8fb41acfaf78d705..e233996cb391d04273f79bd8f7a64f89d6cfc435 100644 --- a/build.gradle +++ b/build.gradle @@ -33,8 +33,8 @@ ext { min_sdk_version = 14 target_sdk_version = 27 - version_code = 1_013_010 - version_name = '1.13.10'// E.g 1.9.72 => 1,009,072 + version_code = 1_013_011 + version_name = '1.13.11'// E.g 1.9.72 => 1,009,072 // App dependencies support_version = '27.1.0' diff --git a/subutil/src/main/java/com/blankj/subutil/util/PathUtils.java b/subutil/src/main/java/com/blankj/subutil/util/PathUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..546869f63691ea93864152e383c7ff57e0d06166 --- /dev/null +++ b/subutil/src/main/java/com/blankj/subutil/util/PathUtils.java @@ -0,0 +1,354 @@ +package com.blankj.subutil.util; + +import android.os.Build; +import android.os.Environment; +import android.support.annotation.RequiresApi; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2018/04/15
+ *     desc  : 路径相关工具类
+ * 
+ */ +public class PathUtils { + + private PathUtils() { + throw new UnsupportedOperationException("u can't instantiate me..."); + } + + /** + * 获取 Android 系统根目录 + *
path: /system
+ * + * @return 系统根目录 + */ + public static String getRootPath() { + return Environment.getRootDirectory().getAbsolutePath(); + } + + /** + * 获取 data 目录 + *
path: /data
+ * + * @return data 目录 + */ + public static String getDataPath() { + return Environment.getDataDirectory().getAbsolutePath(); + } + + /** + * 获取缓存目录 + *
path: data/cache
+ * + * @return 缓存目录 + */ + public static String getIntDownloadCachePath() { + return Environment.getDownloadCacheDirectory().getAbsolutePath(); + } + + /** + * 获取此应用的缓存目录 + *
path: /data/data/package/cache
+ * + * @return 此应用的缓存目录 + */ + public static String getAppIntCachePath() { + return Utils.getApp().getCacheDir().getAbsolutePath(); + } + + /** + * 获取此应用的文件目录 + *
path: /data/data/package/files
+ * + * @return 此应用的文件目录 + */ + public static String getAppIntFilesPath() { + return Utils.getApp().getFilesDir().getAbsolutePath(); + } + + /** + * 获取此应用的数据库文件目录 + *
path: /data/data/package/databases/name
+ * + * @param name 数据库文件名 + * @return 数据库文件目录 + */ + public static String getAppIntDbPath(String name) { + return Utils.getApp().getDatabasePath(name).getAbsolutePath(); + } + + /** + * 获取 Android 外置储存的根目录 + *
path: /storage/emulated/0
+ * + * @return 外置储存根目录 + */ + public static String getExtStoragePath() { + return Environment.getExternalStorageDirectory().getAbsolutePath(); + } + + /** + * 获取闹钟铃声目录 + *
path: /storage/emulated/0/Alarms
+ * + * @return 闹钟铃声目录 + */ + public static String getExtAlarmsPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS) + .getAbsolutePath(); + } + + /** + * 获取相机拍摄的照片和视频的目录 + *
path: /storage/emulated/0/DCIM
+ * + * @return 照片和视频目录 + */ + public static String getExtDcimPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) + .getAbsolutePath(); + } + + /** + * 获取文档目录 + *
path: /storage/emulated/0/Documents
+ * + * @return 文档目录 + */ + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + public static String getExtDocumentsPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + .getAbsolutePath(); + } + + /** + * 获取下载目录 + *
path: /storage/emulated/0/Download
+ * + * @return 下载目录 + */ + public static String getExtDownloadsPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + .getAbsolutePath(); + } + + /** + * 获取视频目录 + *
path: /storage/emulated/0/Movies
+ * + * @return 视频目录 + */ + public static String getExtMoviesPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES) + .getAbsolutePath(); + } + + /** + * 获取音乐目录 + *
path: /storage/emulated/0/Music
+ * + * @return 音乐目录 + */ + public static String getExtMusicPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + .getAbsolutePath(); + } + + /** + * 获取提示音目录 + *
path: /storage/emulated/0/Notifications
+ * + * @return 提示音目录 + */ + public static String getExtNotificationsPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS) + .getAbsolutePath(); + } + + /** + * 获取图片目录 + *
path: /storage/emulated/0/Pictures
+ * + * @return 图片目录 + */ + public static String getExtPicturesPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + .getAbsolutePath(); + } + + /** + * 获取 Podcasts 目录 + *
path: /storage/emulated/0/Podcasts
+ * + * @return Podcasts 目录 + */ + public static String getExtPodcastsPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS) + .getAbsolutePath(); + } + + /** + * 获取铃声目录 + *
path: /storage/emulated/0/Ringtones
+ * + * @return 下载目录 + */ + public static String getExtRingtonesPath() { + return Environment + .getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的缓存目录 + *
path: /storage/emulated/0/Android/data/package/cache
+ * + * @return 此应用在外置储存中的缓存目录 + */ + public static String getAppExtCachePath() { + return Utils.getApp().getExternalCacheDir().getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的文件目录 + *
path: /storage/emulated/0/Android/data/package/files
+ * + * @return 此应用在外置储存中的文件目录 + */ + public static String getAppExtFilePath() { + return Utils.getApp().getExternalFilesDir(null).getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的闹钟铃声目录 + *
path: /storage/emulated/0/Android/data/package/files/Alarms
+ * + * @return 此应用在外置储存中的闹钟铃声目录 + */ + public static String getAppExtAlarmsPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_ALARMS) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的相机目录 + *
path: /storage/emulated/0/Android/data/package/files/DCIM
+ * + * @return 此应用在外置储存中的相机目录 + */ + public static String getAppExtDcimPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_DCIM) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的文档目录 + *
path: /storage/emulated/0/Android/data/package/files/Documents
+ * + * @return 此应用在外置储存中的文档目录 + */ + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + public static String getAppExtDocumentsPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的闹钟目录 + *
path: /storage/emulated/0/Android/data/package/files/Download
+ * + * @return 此应用在外置储存中的闹钟目录 + */ + public static String getAppExtDownloadPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的视频目录 + *
path: /storage/emulated/0/Android/data/package/files/Movies
+ * + * @return 此应用在外置储存中的视频目录 + */ + public static String getAppExtMoviesPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_MOVIES) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的音乐目录 + *
path: /storage/emulated/0/Android/data/package/files/Music
+ * + * @return 此应用在外置储存中的音乐目录 + */ + public static String getAppExtMusicPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_MUSIC) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的提示音目录 + *
path: /storage/emulated/0/Android/data/package/files/Notifications
+ * + * @return 此应用在外置储存中的提示音目录 + */ + public static String getAppExtNotificationsPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的图片目录 + *
path: /storage/emulated/0/Android/data/package/files/Pictures
+ * + * @return 此应用在外置储存中的图片目录 + */ + public static String getAppExtPicturesPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_PICTURES) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的 Podcasts 目录 + *
path: /storage/emulated/0/Android/data/package/files/Podcasts
+ * + * @return 此应用在外置储存中的 Podcasts 目录 + */ + public static String getAppExtPodcastsPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_PODCASTS) + .getAbsolutePath(); + } + + /** + * 获取此应用在外置储存中的铃声目录 + *
path: /storage/emulated/0/Android/data/package/files/Ringtones
+ * + * @return 此应用在外置储存中的铃声目录 + */ + public static String getAppExtRingtonesPath() { + return Utils.getApp().getExternalFilesDir(Environment.DIRECTORY_RINGTONES) + .getAbsolutePath(); + } + + /** + * 获取此应用的 Obb 目录 + *
path: /storage/emulated/0/Android/obb/package
+ *
一般用来存放游戏数据包
+ * + * @return 此应用的 Obb 目录 + */ + public static String getObbPath() { + return Utils.getApp().getObbDir().getAbsolutePath(); + } +} diff --git a/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java b/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java index 5e09412922869e82b8af8b1d4481814c44a68f94..eb81ad0263a56f7a7630ff4e77d26479c7a76203 100644 --- a/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java +++ b/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java @@ -24,6 +24,5 @@ public class TestUtils { @Test public void test() throws Exception { - } } \ No newline at end of file diff --git a/update_log.md b/update_log.md index 2da7aad3cce1ef187ec77cda2d275ab322cf1732..25290b2af7db88392c8d00849aa392a0f1c4f4c1 100644 --- a/update_log.md +++ b/update_log.md @@ -1,3 +1,4 @@ +* 18/04/16 完善 AppUtils#installAppSilent 路径包含空格问题,发布 1.13.11 版本 * 18/04/10 完善 OnCrashListener 回调崩溃信息,发布 1.13.10 版本 * 18/04/09 修复静默安装重载错误,发布 1.13.9 版本 * 18/04/08 修复获取栈顶 Activity 链表为空的异常,获取栈顶 Activity 放到 Utils 中,发布 1.13.8 版本 @@ -8,7 +9,7 @@ * 18/03/20 修复 PermissionUtils 子进程的问题,发布 1.13.5 版本 * 18/03/16 新增 gradle 插件来格式化 README * 18/03/14 修复 KeyboardUtils#getContentViewInvisibleHeight,发布 1.13.4 版本 -* 18/03/10 完善 Utils#installAppSilent 和 DeviceUtils#getMacAddress,发布 1.13.3 版本 +* 18/03/10 完善 AppUtils#installAppSilent 和 DeviceUtils#getMacAddress,发布 1.13.3 版本 * 18/03/09 完善 ActivityUtils#getTopActivity * 18/03/08 新增反射获取栈顶 Activity 的方法,发布 1.13.2 版本 * 18/03/07 修复 PermissionUtils 请求权限为 0 的 崩溃 diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md index 9cd73931254c50e039344ef184b659f28c6db8cf..63886bd83a052ab6453bfc1be9bf9c50b76f36bf 100644 --- a/utilcode/README-CN.md +++ b/utilcode/README-CN.md @@ -2,7 +2,7 @@ Gradle: ```groovy -compile 'com.blankj:utilcode:1.13.10' +implementation 'com.blankj:utilcode:1.13.11' ``` diff --git a/utilcode/README.md b/utilcode/README.md index f835125a46988e042e9c269d8b565aa45a216e3d..3378814a3b6cdf5fafb848f04047bcf808a46ebf 100644 --- a/utilcode/README.md +++ b/utilcode/README.md @@ -2,7 +2,7 @@ Gradle: ```groovy -compile 'com.blankj:utilcode:1.13.10' +implementation 'com.blankj:utilcode:1.13.11' ``` diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java index bf0ae53380cbe51e87d64314cdd6f4d1ac63406f..d6ffb0476c9f6ce754fa85f66e6d318ba1878344 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java @@ -151,7 +151,7 @@ public final class AppUtils { public static boolean installAppSilent(final File file, final String params) { if (!isFileExists(file)) return false; boolean isRoot = isDeviceRooted(); - String filePath = file.getAbsolutePath(); + String filePath = '"' + file.getAbsolutePath() + '"'; String command = "LD_LIBRARY_PATH=/vendor/lib*:/system/lib* pm install " + (params == null ? "" : params + " ") + filePath;