Add Reproducible Builds (still needs testing)
This commit is contained in:
parent
08ed1d41e6
commit
0a387db625
19
Dockerfile
Normal file
19
Dockerfile
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
FROM gradle:5.6.4-jdk8
|
||||||
|
|
||||||
|
ENV ANDROID_SDK_URL https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
|
||||||
|
ENV ANDROID_BUILD_TOOLS_VERSION 29.0.3
|
||||||
|
ENV ANDROID_HOME /usr/local/android-sdk-linux
|
||||||
|
ENV ANDROID_VERSION 29
|
||||||
|
ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools
|
||||||
|
|
||||||
|
RUN mkdir "$ANDROID_HOME" .android && \
|
||||||
|
cd "$ANDROID_HOME" && \
|
||||||
|
curl -o sdk.zip $ANDROID_SDK_URL && \
|
||||||
|
unzip sdk.zip && \
|
||||||
|
rm sdk.zip
|
||||||
|
|
||||||
|
RUN yes | ${ANDROID_HOME}/tools/bin/sdkmanager --licenses
|
||||||
|
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
|
||||||
|
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}" \
|
||||||
|
"platforms;android-${ANDROID_VERSION}" \
|
||||||
|
"platform-tools"
|
61
REPRODUCIBLE_BUILDS.md
Normal file
61
REPRODUCIBLE_BUILDS.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
# Reproducible Builds
|
||||||
|
|
||||||
|
Note: reproducible builds work starting version 1.1.0
|
||||||
|
|
||||||
|
## Install Docker
|
||||||
|
|
||||||
|
Download and install [Docker](https://www.docker.com/).
|
||||||
|
|
||||||
|
## Check your Thorium app version and build timestamp
|
||||||
|
|
||||||
|
1. Open the Thorium app
|
||||||
|
2. Go to Settings
|
||||||
|
3. Check the app version listed under About 'Version' (e.g., 1.1.0), and record its value to be used later
|
||||||
|
4. Check the build timestamp under About 'Build Time' (e.g., 1593942384524), and record its value to be used later
|
||||||
|
|
||||||
|
## Download the App open-source code
|
||||||
|
|
||||||
|
1. Make sure you have `git` installed
|
||||||
|
2. Clone the Github repository
|
||||||
|
3. Checkout the Tag that corresponds to the version of your Thorium app (e.g., 1.1.0)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/sschueller/peertube-android ~/peertube-android
|
||||||
|
cd ~/peertube-android
|
||||||
|
git checkout v1.1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build the project using Docker
|
||||||
|
|
||||||
|
1. Build a Docker Image with the required Android Tools
|
||||||
|
2. Build the App in the Docker Container while specifying the build timestamp that was recorded earlier (e.g., 1593942384524)
|
||||||
|
3. Copy the freshly-built APK
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ~/peertube-android
|
||||||
|
docker build -t thorium-builder .
|
||||||
|
docker run --rm -v ~/dp3t-app-android-ch:/home/peertube-android -w /home/peertube-android thorium-builder gradle assembleProdRelease -PkeystorePassword=securePassword -PkeyAliasPassword=securePassword -PkeystoreFile=build.keystore -PbuildTimestamp=1593942384524
|
||||||
|
cp app/build/outputs/apk/prod/release/app-prod-release.apk thorium-built.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extract the Play Store APK from your phone
|
||||||
|
|
||||||
|
1. Make sure you have `adb` installed
|
||||||
|
2. Connect your phone to your computer
|
||||||
|
3. Extract the APK from the phone
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ~/peertube-android
|
||||||
|
adb pull `adb shell pm path net.schueller.peertube | cut -d':' -f2` thorium-store.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
## Compare the two files
|
||||||
|
|
||||||
|
1. Make sure you have `python` installed
|
||||||
|
2. Use the `apkdiff` script to compare the APKs
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ~/peertube-android
|
||||||
|
python apkdiff.py thorium-built.apk thorium-store.apk
|
||||||
|
```
|
||||||
|
|
@ -1,5 +1,22 @@
|
|||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
|
ext.readProperty = { paramName -> readPropertyWithDefault(paramName, null) }
|
||||||
|
ext.readPropertyWithDefault = { paramName, defaultValue ->
|
||||||
|
if (project.hasProperty(paramName)) {
|
||||||
|
return project.getProperties().get(paramName)
|
||||||
|
} else {
|
||||||
|
Properties properties = new Properties()
|
||||||
|
if (project.rootProject.file('local.properties').exists()) {
|
||||||
|
properties.load(project.rootProject.file('local.properties').newDataInputStream())
|
||||||
|
}
|
||||||
|
if (properties.getProperty(paramName) != null) {
|
||||||
|
return properties.getProperty(paramName)
|
||||||
|
} else {
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 29
|
compileSdkVersion 29
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
@ -8,6 +25,9 @@ android {
|
|||||||
targetSdkVersion 29
|
targetSdkVersion 29
|
||||||
versionCode 1043
|
versionCode 1043
|
||||||
versionName "1.0.43"
|
versionName "1.0.43"
|
||||||
|
//buildTime readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
|
||||||
|
//buildConfigField "long", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
|
||||||
|
//resValue "string", "BUILD_TIME", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + 'L'
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
ext {
|
ext {
|
||||||
libVersions = [
|
libVersions = [
|
||||||
@ -87,6 +107,7 @@ android {
|
|||||||
|
|
||||||
applicationVariants.all { variant ->
|
applicationVariants.all { variant ->
|
||||||
variant.resValue "string", "versionName", variant.versionName
|
variant.resValue "string", "versionName", variant.versionName
|
||||||
|
variant.resValue "string", "buildTime", readPropertyWithDefault('buildTimestamp', System.currentTimeMillis()) + ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,6 +357,7 @@
|
|||||||
<string name="server_selection_video_totals">Videos: %s, Local Videos: %s</string>
|
<string name="server_selection_video_totals">Videos: %s, Local Videos: %s</string>
|
||||||
|
|
||||||
<string name="menu_video_options_quality_automated">Automated</string>
|
<string name="menu_video_options_quality_automated">Automated</string>
|
||||||
|
<string name="pref_title_buildtime">Build Time</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -1,4 +1,5 @@
|
|||||||
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
|
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<PreferenceCategory app:title="@string/settings_activity_look_and_feel_category_title" app:iconSpaceReserved="false">
|
<PreferenceCategory app:title="@string/settings_activity_look_and_feel_category_title" app:iconSpaceReserved="false">
|
||||||
|
|
||||||
@ -83,6 +84,11 @@
|
|||||||
app:title="@string/pref_title_version"
|
app:title="@string/pref_title_version"
|
||||||
app:iconSpaceReserved="false"/>
|
app:iconSpaceReserved="false"/>
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
app:summary="@string/buildTime"
|
||||||
|
app:title="@string/pref_title_buildtime"
|
||||||
|
app:iconSpaceReserved="false"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
app:summary="@string/pref_description_license"
|
app:summary="@string/pref_description_license"
|
||||||
app:title="@string/pref_title_license"
|
app:title="@string/pref_title_license"
|
||||||
|
Loading…
Reference in New Issue
Block a user