47 lines
1.7 KiB
Markdown
47 lines
1.7 KiB
Markdown
This directory contains the native files of libraries that were modified for relocation. They will be copied from here during the normal build steps.
|
|
|
|
Before adding/updating a library, make sure you have Python 3.8+ installed and check the instructions below.
|
|
|
|
How to add a library's natives:
|
|
|
|
1. In `build.gradle`:
|
|
|
|
- Make sure the target package is the same length or shorter (untested) than the source package. Underscores in native methods will be mapped to `_1` so account for that as well.
|
|
- Exclude the native files and add them as `relocateNative` (see example).
|
|
|
|
Example:
|
|
|
|
```groovy
|
|
relocate "org.sqlite", "dh_sqlite", {
|
|
exclude "org/sqlite/native/**"
|
|
}
|
|
|
|
transform(NativeTransformer) {
|
|
// NativeTransformer configuration
|
|
rootDir = project.rootDir
|
|
|
|
// Replace native strings, e.g. used in calls back to Java
|
|
relocateNative "org/sqlite", "dh_sqlite"
|
|
// Rename native methods used when calling from Java
|
|
relocateNative "org_sqlite", "dh_1sqlite"
|
|
}
|
|
```
|
|
|
|
How to update a library's natives:
|
|
|
|
1. Delete the library's folder in cache/.
|
|
2. It will repopulate during the next build.
|
|
|
|
Why does this step exist?
|
|
|
|
- Native files are not handled by the shadow plugin correctly.
|
|
- I preferred it as a more streamlined approach, although a bit hacky.
|
|
- Possible alternatives:
|
|
- Use edited libraries' source code: although more straightforward, it requires maintaining and updating the repositories for the libraries being added
|
|
- Interfacing with the necessary libraries directly: an absolute mess for technical reasons
|
|
|
|
What are libraries used?
|
|
|
|
- LIEF: for fixing binaries after replacing strings
|
|
- apple-codesign: for re-signing Mac binaries, since their signatures get invalidated after previous steps
|