libsu/CHANGELOG.md

142 lines
7.3 KiB
Markdown
Raw Normal View History

2020-07-24 06:45:27 +00:00
## 2.6.0
### API Changes
- New APIs to allow users to customize which thread to dispatch when returning results via callbacks
- `Shell.getShell(Executor, GetShellCallback)`
- `Shell.Job.submit(Executor, GetShellCallback)`
### Improvements
- `Shell.su/sh(...).submit(...)` will no longer switch back to the main thread internally, reducing unnecessary thread hopping
### Behavior Changes
- The bundled BusyBox now utilizes "Standalone Mode ASH", which forces all commands to use BusyBox applets.
For more info please read the Javadoc for `BusyBoxInstaller`.
- The bundled BusyBox now supports full SELinux features
### Breaking Changes
- All deprecated APIs in 2.5.2 is removed
2020-07-19 11:19:56 +00:00
## 2.5.2
### Improvements
- Be more conservative with synchronizing internally
- Use a more efficient SerialExecutorService implementation
- Allow users to set their own ExecutorService for libsu (`Shell.EXECUTOR`)
- Some minor optimizations
### Deprecation
- All deprecated methods/fields/classes will be removed in the next release
- `ShellUtils.pump(InputStream, OutputStream)`
- `ShellUtils.noFlushPump(InputStream, OutputStream)`
- `ShellUtils.checkSum(String, File, String)`
- `Shell.FLAG_USE_MAGISK_BUSYBOX`
- `Shell.Config.addInitializers(...)`
- `Shell.Config.getFlags()`
- `SuProcessFileInputStream`
- `SuProcessFileOutputStream`
2019-09-12 02:39:40 +00:00
## 2.5.1
### Improvements / Bug fixes
- `SuFile.getParent()` no longer cause NPE when no parent exists
- The `libsu:busybox` module now includes prebuilt busybox binaries as native libraries.
This properly conforms with Play Store rules to ship executables along with APKs.
All 4 ABIs (armeabi-v7a, arm64-v8a, x86, x86_64) are included; utilize app bundles for smaller app download sizes.
- More nullability annotations for better Kotlin integration.
- Some minor internal implementation improvements
### API Changes
- `ShellUtils.genRandomAlphaNumString(int)` is removed
2019-04-19 04:56:06 +00:00
## 2.5.0
### Behavior Changes
- `SuFile` will now follow symbolic links (as it always should)
- `SuFile.length()` will no longer report block total size on block devices (as it shouldn't in the first place)
- `SuFileInputStream` and `SuFileOutputStream` now supports I/O on all file formats, including character files (e.g. files in `/sys` and `/proc`), and also outputs to block devices correctly
### API Changes
- Make `SuFile.isBlock()`, `SuFile.isCharacter()`, `SuFile.isSymlink()` public
### Improvements
- Tons internal optimizations to improve performance
- Rewrite shell backed I/O from scratch
- Added more detailed Javadoc for `SuFile`
2019-04-08 23:41:37 +00:00
## 2.4.0
### Behavior Changes
- `SuFile` is no longer a wrapper class around `File`. Calling the constructor directly will directly open a shell backed `File` instance. This change is due to the fact that `File` wrapper class causes some issues in methods like `File.renameTo(File)`.
### API Changes
- Introduce new helper methods: `SuFile.open(...)`: depending on whether the global shell has root access or not, these methods will return either a normal `File` instance or `SuFile`. This is the same behavior as the previous `SuFile` constructor (the only difference is that `SuFile` used to wrap around the instance).
## 2.3.3
2019-04-02 19:36:54 +00:00
- Update proguard rules to support R8 full mode
- Update gradle scripts to build proper Javadoc with links to Android reference
2019-04-08 23:41:37 +00:00
## 2.3.2
2019-03-21 14:52:38 +00:00
- Fix a possible NPE in `SuFile`
2019-04-08 23:41:37 +00:00
## 2.3.1
2019-02-07 05:20:53 +00:00
- Publish aggregated Javadoc
- Strip out all deprecated APIs
2019-04-08 23:41:37 +00:00
## 2.3.0
2019-02-03 14:42:05 +00:00
Starting from 2.3.0, you shall stop using `Shell.Container`, including `ContainerApp`.
2019-04-08 23:41:37 +00:00
### Bug fixes
2019-02-03 14:42:05 +00:00
- Fix `Shell.Initializer` NPE on old API levels
2019-04-08 23:41:37 +00:00
### API Changes
2019-02-03 14:42:05 +00:00
- `Shell.Config.setContainer()` is deprecated. libsu will handle the global shell without any configurations
- `ContainerApp` is deprecated. The class is now just a stock `Application`
2019-04-08 23:41:37 +00:00
## 2.2.1
### Behavior Changes
2019-02-01 04:08:25 +00:00
- When using high level APIs (`Shell.su`, `Shell.sh`, `Shell.rootAccess()`), `NoShellException` is now silently suppressed to prevent unexpected crashes. Should no shell is possible to be created, `Shell.su/sh` will immediately return a `Shell.Result` with no output and show failure; `Shell.rootAccess()` will simply return `false`.
2019-04-08 23:41:37 +00:00
## 2.2.0
2019-01-03 22:29:05 +00:00
Starting from this release, `libsu` is modularized into 3 parts: `core`, `io`, and `busybox`.
If you only use the shell implementation, you just need `com.github.topjohnwu.libsu:core`. `com.github.topjohnwu.libsu:io` and `com.github.topjohnwu.libsu:busybox` are optional: include the former to use the I/O wrapper classes, and the latter to bundle the prebuilt busybox binaries with your app. The old `com.github.topjohnwu:libsu` can still be used, but all 3 components will be pulled in.
2019-04-08 23:41:37 +00:00
### Bug fixes
2019-01-03 22:29:05 +00:00
- Clean up potential garbage output before testing shell
- Prevent possible `Shell.waitAndClose(int, TimeUnit)` race conditions
2019-04-08 23:41:37 +00:00
### API Changes
2019-01-03 22:29:05 +00:00
- Add support for multiple `Shell.Initializer`s: new methods `void Shell.Config.setInitializers(...)` and `void Shell.Config.addInitializers(...)` are added; `void Shell.Config.setInitializer(Initializer.class)` is deprecated.
2019-04-08 23:41:37 +00:00
### Breaking Changes
2019-01-03 22:29:05 +00:00
- Remove the class `BusyBox`. To install the prebuilt busybox, add `com.github.topjohnwu.libsu:busybox` as a dependency, and register `BusyBoxInstaller` as an initializer (`Shell.Config.addInitializers(BusyBoxInstaller.class);`)
- Introduce a new flag: `Shell.FLAG_USE_MAGISK_BUSYBOX`. With this flag set, `/sbin/.magisk/busybox` will be prepended to `PATH`, so the shell will use Magisk's internal busybox.
2019-04-08 23:41:37 +00:00
## 2.1.2
### Bug fixes
2018-11-25 07:47:22 +00:00
- Fix a bug that could cause `new SuFile(parent, name)` to fail
2019-04-08 23:41:37 +00:00
### Behavior Changes
2018-11-25 07:47:22 +00:00
- When creating `SuFileInputStream`/`SuFileOutputStream`/`SuRandomAccessFile` with a character file, it will throw `FileNotFoundException` instead of failing silently. Character file I/O is not possible with shells, use `Shell.su("cat <chr_file>").exec().getOut()` instead.
2019-04-08 23:41:37 +00:00
### API Changes
2018-11-25 07:47:22 +00:00
- Add `boolean Shell.waitAndClose(long, TimeUnit)` and `void Shell.waitAndClose()`. You can now wait for all tasks to finish before closing the shell instance.
- Add `Shell.Config.setTimeout(long)`. Use it to set the maximum time for waiting a new shell construction. The default value is 20 seconds.
2019-04-08 23:41:37 +00:00
## 2.0.3
2018-11-12 03:50:34 +00:00
2019-04-08 23:41:37 +00:00
### Improvements
2018-11-12 03:50:34 +00:00
- `Shell.isAlive()` method is updated to get process status directly via reflection rather than the traditional `Process.exitValue()` exception handling. This optimization significantly reduces the overhead when switching between Shell tasks.
2019-04-08 23:41:37 +00:00
### API Changes
2018-11-12 03:50:34 +00:00
- The 1.x version APIs are completely removed
- Retrolambda is removed, you should start using AGP 3.0.0+ which comes with official Java 8 desugaring
2019-04-08 23:41:37 +00:00
## 2.0.2
2018-09-10 03:42:55 +00:00
2019-04-08 23:41:37 +00:00
### Fixes
2018-09-10 03:42:55 +00:00
- Return proper list in `Shell.Result.getErr()`
2019-04-08 23:41:37 +00:00
## 2.0.1
2018-08-08 10:44:07 +00:00
2019-04-08 23:41:37 +00:00
### Fixes / Improvements
2018-08-08 10:44:07 +00:00
- Calling `submit` in `PendingJob` used to end up calling the overridden `exec` instead of `exec` in `JobImpl`. Proxy through a private method in `JobImpl` to prevent changed behavior of `JobImpl` subclasses.
- Even though the parameters of `Shell.Job.add(...)` is labeled `@NonNull`, it is still possible that developers still pass in `null` and cause NPE. Check `null` before proceed any further.
- Fix a bug that constructed shell instances weren't cached in the container when created using fallback methods (e.g. no root -> fallback to non-root shell). This would cause infinite loop when no root is available.
2018-08-08 10:47:16 +00:00
- Prevent `IllegalStateException` if the user provide a filter accepting `.` or `..` in `SuFile.list()` family methods.