OpenSSL & FFmpeg as submodules & Different versionCode for each ABI
This commit is contained in:
parent
33d565bf22
commit
bb49501403
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -7,3 +7,6 @@
|
|||||||
[submodule "app/libcryfs"]
|
[submodule "app/libcryfs"]
|
||||||
path = app/libcryfs
|
path = app/libcryfs
|
||||||
url = https://forge.chapril.org/hardcoresushi/libcryfs.git
|
url = https://forge.chapril.org/hardcoresushi/libcryfs.git
|
||||||
|
[submodule "app/ffmpeg/ffmpeg"]
|
||||||
|
path = app/ffmpeg/ffmpeg
|
||||||
|
url = https://git.ffmpeg.org/ffmpeg.git
|
||||||
|
38
BUILD.md
38
BUILD.md
@ -38,31 +38,17 @@ __Don't continue if the verification fails!__
|
|||||||
|
|
||||||
Initialize submodules:
|
Initialize submodules:
|
||||||
```
|
```
|
||||||
$ git submodule update --depth=1 --init
|
$ git submodule update --init
|
||||||
```
|
```
|
||||||
[FFmpeg](https://ffmpeg.org) is needed to record encrypted video:
|
If you want Gocryptfs support, initliaze libgocryptfs submodules:
|
||||||
```
|
```
|
||||||
$ cd app/ffmpeg
|
$ cd app/libgocryptfs
|
||||||
$ git clone --depth=1 https://git.ffmpeg.org/ffmpeg.git
|
$ git submodule update --init
|
||||||
```
|
```
|
||||||
If you want Gocryptfs support, you need to download OpenSSL:
|
If you want CryFS support, initialize libcryfs submodules:
|
||||||
```
|
|
||||||
$ cd ../libgocryptfs
|
|
||||||
$ wget https://openssl.org/source/openssl-3.3.1.tar.gz
|
|
||||||
```
|
|
||||||
Verify OpenSSL signature:
|
|
||||||
```
|
|
||||||
$ wget https://openssl.org/source/openssl-3.3.1.tar.gz.asc
|
|
||||||
$ gpg --verify openssl-3.3.1.tar.gz.asc openssl-3.3.1.tar.gz
|
|
||||||
```
|
|
||||||
Continue **ONLY** if the signature is **VALID**.
|
|
||||||
```
|
|
||||||
$ tar -xzf openssl-3.3.1.tar.gz
|
|
||||||
```
|
|
||||||
If you want CryFS support, initialize libcryfs:
|
|
||||||
```
|
```
|
||||||
$ cd app/libcryfs
|
$ cd app/libcryfs
|
||||||
$ git submodule update --depth=1 --init
|
$ git submodule update --init
|
||||||
```
|
```
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
@ -70,31 +56,33 @@ Retrieve your Android NDK installation path, usually something like `/home/\<use
|
|||||||
```
|
```
|
||||||
$ export ANDROID_NDK_HOME="<your ndk path>"
|
$ export ANDROID_NDK_HOME="<your ndk path>"
|
||||||
```
|
```
|
||||||
|
If you know your CPU ABI, you can specify it to build scripts in order to speed up compilation time. If you don't know it, or want to build for all ABIs, just leave the field blank.
|
||||||
|
|
||||||
Start by compiling FFmpeg:
|
Start by compiling FFmpeg:
|
||||||
```
|
```
|
||||||
$ cd app/ffmpeg
|
$ cd app/ffmpeg
|
||||||
$ ./build.sh ffmpeg
|
$ ./build.sh [<ABI>]
|
||||||
```
|
```
|
||||||
## libgocryptfs
|
## libgocryptfs
|
||||||
This step is only required if you want Gocryptfs support.
|
This step is only required if you want Gocryptfs support.
|
||||||
```
|
```
|
||||||
$ cd app/libgocryptfs
|
$ cd app/libgocryptfs
|
||||||
$ ANDROID_NDK_ROOT="$ANDROID_NDK_HOME" OPENSSL_PATH="./openssl-3.3.1" ./build.sh
|
$ ./build.sh [<ABI>]
|
||||||
```
|
```
|
||||||
## Compile APKs
|
## Compile APKs
|
||||||
Gradle build libgocryptfs and libcryfs by default.
|
Gradle build libgocryptfs and libcryfs by default.
|
||||||
|
|
||||||
To build DroidFS without Gocryptfs support, run:
|
To build DroidFS without Gocryptfs support, run:
|
||||||
```
|
```
|
||||||
$ ./gradlew assembleRelease -PdisableGocryptfs=true
|
$ ./gradlew assembleRelease [-Pabi=<ABI>] -PdisableGocryptfs=true
|
||||||
```
|
```
|
||||||
To build DroidFS without CryFS support, run:
|
To build DroidFS without CryFS support, run:
|
||||||
```
|
```
|
||||||
$ ./gradlew assembleRelease -PdisableCryFS=true
|
$ ./gradlew assembleRelease [-Pabi=<ABI>] -PdisableCryFS=true
|
||||||
```
|
```
|
||||||
If you want to build DroidFS with support for both Gocryptfs and CryFS, just run:
|
If you want to build DroidFS with support for both Gocryptfs and CryFS, just run:
|
||||||
```
|
```
|
||||||
$ ./gradlew assembleRelease
|
$ ./gradlew assembleRelease [-Pabi=<ABI>]
|
||||||
```
|
```
|
||||||
|
|
||||||
# Sign APKs
|
# Sign APKs
|
||||||
|
@ -13,12 +13,6 @@ if (hasProperty("disableGocryptfs")) {
|
|||||||
ext.disableGocryptfs = false
|
ext.disableGocryptfs = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasProperty("nosplits")) {
|
|
||||||
ext.splits = false
|
|
||||||
} else {
|
|
||||||
ext.splits = true
|
|
||||||
}
|
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk 34
|
compileSdk 34
|
||||||
ndkVersion '25.2.9519653'
|
ndkVersion '25.2.9519653'
|
||||||
@ -33,6 +27,8 @@ android {
|
|||||||
jvmTarget = "17"
|
jvmTarget = "17"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def abiCodes = [ "arm64-v8a": 1, "armeabi-v7a": 2, "x86_64": 3, "x86": 4]
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "sushi.hardcore.droidfs"
|
applicationId "sushi.hardcore.droidfs"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
@ -40,8 +36,17 @@ android {
|
|||||||
versionCode 36
|
versionCode 36
|
||||||
versionName "2.1.3"
|
versionName "2.1.3"
|
||||||
|
|
||||||
ndk {
|
splits {
|
||||||
abiFilters "x86", "x86_64", "armeabi-v7a", "arm64-v8a"
|
abi {
|
||||||
|
enable true
|
||||||
|
reset() // fix unknown bug (https://ru.stackoverflow.com/questions/1557805/abis-armeabi-mips-mips64-riscv64-are-not-supported-for-platform)
|
||||||
|
if (project.hasProperty("abi")) {
|
||||||
|
include project.getProperty("abi")
|
||||||
|
} else {
|
||||||
|
abiCodes.keySet().each { abi -> include abi }
|
||||||
|
universalApk !project.hasProperty("nouniversal")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
externalNativeBuild.cmake {
|
externalNativeBuild.cmake {
|
||||||
@ -54,20 +59,20 @@ android {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (project.ext.splits) {
|
|
||||||
splits {
|
|
||||||
abi {
|
|
||||||
enable true
|
|
||||||
reset() // fix unknown bug (https://ru.stackoverflow.com/questions/1557805/abis-armeabi-mips-mips64-riscv64-are-not-supported-for-platform)
|
|
||||||
universalApk true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
applicationVariants.configureEach { variant ->
|
applicationVariants.configureEach { variant ->
|
||||||
variant.resValue "string", "versionName", variant.versionName
|
variant.resValue "string", "versionName", variant.versionName
|
||||||
buildConfigField "boolean", "CRYFS_DISABLED", "${project.ext.disableCryFS}"
|
buildConfigField "boolean", "CRYFS_DISABLED", "${project.ext.disableCryFS}"
|
||||||
buildConfigField "boolean", "GOCRYPTFS_DISABLED", "${project.ext.disableGocryptfs}"
|
buildConfigField "boolean", "GOCRYPTFS_DISABLED", "${project.ext.disableGocryptfs}"
|
||||||
|
variant.outputs.each { output ->
|
||||||
|
def abi = output.getFilter(com.android.build.OutputFile.ABI)
|
||||||
|
if (abi == null) { // universal
|
||||||
|
output.versionCodeOverride = variant.versionCode*10
|
||||||
|
output.outputFileName = "DroidFS-v${variant.versionName}-${variant.name}-universal.apk"
|
||||||
|
} else {
|
||||||
|
output.versionCodeOverride = variant.versionCode*10 + abiCodes[abi]
|
||||||
|
output.outputFileName = "DroidFS-v${variant.versionName}-${variant.name}-${abi}.apk"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
|
1
app/ffmpeg/.gitignore
vendored
1
app/ffmpeg/.gitignore
vendored
@ -1,2 +1 @@
|
|||||||
ffmpeg
|
|
||||||
build
|
build
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
if [ -z ${ANDROID_NDK_HOME+x} ]; then
|
if [ -z ${ANDROID_NDK_HOME+x} ]; then
|
||||||
echo "Error: \$ANDROID_NDK_HOME is not defined." >&2
|
echo "Error: \$ANDROID_NDK_HOME is not defined." >&2
|
||||||
exit 1
|
exit 1
|
||||||
elif [ $# -lt 1 ]; then
|
|
||||||
echo "Usage: $0 <FFmpeg source directory> [<ABI>]" >&2
|
|
||||||
exit 1
|
|
||||||
else
|
else
|
||||||
FFMPEG_DIR=$1
|
cd "$(dirname "$0")"
|
||||||
|
FFMPEG_DIR="ffmpeg"
|
||||||
compile_for_arch() {
|
compile_for_arch() {
|
||||||
echo "Compiling for $1..."
|
echo "Compiling for $1..."
|
||||||
case $1 in
|
case $1 in
|
||||||
@ -29,7 +29,8 @@ else
|
|||||||
ARCH="arm"
|
ARCH="arm"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
(cd $FFMPEG_DIR && make clean;
|
(cd $FFMPEG_DIR
|
||||||
|
make clean || true
|
||||||
./configure \
|
./configure \
|
||||||
--cc="$CFN" \
|
--cc="$CFN" \
|
||||||
--cxx="$CFN++" \
|
--cxx="$CFN++" \
|
||||||
@ -73,22 +74,19 @@ else
|
|||||||
--disable-audiotoolbox \
|
--disable-audiotoolbox \
|
||||||
--disable-appkit \
|
--disable-appkit \
|
||||||
--disable-alsa \
|
--disable-alsa \
|
||||||
--disable-debug \
|
--disable-debug
|
||||||
&&
|
make -j "$(nproc --all)" >/dev/null)
|
||||||
make -j $(nproc --all) >/dev/null) &&
|
mkdir -p "build/$1/libavformat" "build/$1/libavcodec" "build/$1/libavutil"
|
||||||
mkdir -p build/$1/libavformat build/$1/libavcodec build/$1/libavutil &&
|
cp $FFMPEG_DIR/libavformat/*.h $FFMPEG_DIR/libavformat/libavformat.so "build/$1/libavformat"
|
||||||
cp $FFMPEG_DIR/libavformat/*.h $FFMPEG_DIR/libavformat/libavformat.so build/$1/libavformat &&
|
cp $FFMPEG_DIR/libavcodec/*.h $FFMPEG_DIR/libavcodec/libavcodec.so "build/$1/libavcodec"
|
||||||
cp $FFMPEG_DIR/libavcodec/*.h $FFMPEG_DIR/libavcodec/libavcodec.so build/$1/libavcodec &&
|
cp $FFMPEG_DIR/libavutil/*.h $FFMPEG_DIR/libavutil/libavutil.so "build/$1/libavutil"
|
||||||
cp $FFMPEG_DIR/libavutil/*.h $FFMPEG_DIR/libavutil/libavutil.so build/$1/libavutil ||
|
|
||||||
exit 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
export PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH
|
||||||
if [ $# -eq 2 ]; then
|
if [ $# -eq 1 ]; then
|
||||||
compile_for_arch $2
|
compile_for_arch "$1"
|
||||||
else
|
else
|
||||||
declare -a ABIs=("x86_64" "x86" "arm64-v8a" "armeabi-v7a")
|
for abi in "x86_64" "x86" "arm64-v8a" "armeabi-v7a"; do
|
||||||
for abi in ${ABIs[@]}; do
|
|
||||||
compile_for_arch $abi
|
compile_for_arch $abi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
1
app/ffmpeg/ffmpeg
Submodule
1
app/ffmpeg/ffmpeg
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit af25a4bfd2503caf3ee485b27b99b620302f5718
|
@ -1 +1 @@
|
|||||||
Subproject commit 4f32853ae5ac70811b451cac60ed36fd5b93cbc8
|
Subproject commit b221d4cf3c70edc711169a769a476802d2577b2b
|
6
app/proguard-rules.pro
vendored
6
app/proguard-rules.pro
vendored
@ -16,9 +16,3 @@
|
|||||||
-keep class sushi.hardcore.droidfs.VolumeData$* {
|
-keep class sushi.hardcore.droidfs.VolumeData$* {
|
||||||
static public android.os.Parcelable$Creator CREATOR;
|
static public android.os.Parcelable$Creator CREATOR;
|
||||||
}
|
}
|
||||||
-keep class sushi.hardcore.droidfs.filesystems.EncryptedVolume {
|
|
||||||
public int describeContents();
|
|
||||||
}
|
|
||||||
-keep class sushi.hardcore.droidfs.filesystems.EncryptedVolume$* {
|
|
||||||
static public android.os.Parcelable$Creator CREATOR;
|
|
||||||
}
|
|
@ -1 +1 @@
|
|||||||
Subproject commit 48631380a7a8b5f0932078e2b643e06c3f433890
|
Subproject commit 8df8522088b095de23d4de95c73320a91b111a8d
|
Loading…
Reference in New Issue
Block a user