From bee7de476b51dea746f500df850065498bc87c75 Mon Sep 17 00:00:00 2001 From: Chirayu Desai <chirayudesai1@gmail.com> Date: Thu, 8 Feb 2018 18:53:41 +0530 Subject: [PATCH] Data ota Based on privileged-extension 0.2.7 scripts --- app/src/main/scripts/update-binary | 45 ++++++++++++++++ create_ota.sh | 79 +++++++++++++++++++++++++++++ f-droid.org-signing-key.gpg | Bin 0 -> 8022 bytes 3 files changed, 124 insertions(+) create mode 100755 app/src/main/scripts/update-binary create mode 100755 create_ota.sh create mode 100644 f-droid.org-signing-key.gpg diff --git a/app/src/main/scripts/update-binary b/app/src/main/scripts/update-binary new file mode 100755 index 000000000..95828f3c5 --- /dev/null +++ b/app/src/main/scripts/update-binary @@ -0,0 +1,45 @@ +#!/sbin/sh + +# Copyright 2013 Koushik Dutta, 2014 Ron Rieve +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# arg 1 is recovery api version, generally 3. +# arg 2 is the pipe fd, to the recovery binary. +# communicate with it using the recovery api. +# arg 3 is the zip file + +echo -n -e 'ui_print Installing F-Droid...\n' > /proc/self/fd/$2 + +FDROID_NAME=F-Droid +FDROID=${FDROID_NAME}.apk +FDROIDDIR=/data/app + +cd /tmp +mkdir fdroid +cd fdroid +unzip -o "$3" +if [ "$?" -ne "0" ] +then + cp /cache/${FDROID} . +fi + +mount /data + +cp ${FDROID} ${FDROIDDIR} +chmod 644 ${FDROIDDIR}/${FDROID} + +umount /data + +echo -n -e 'ui_print done\n' > /proc/self/fd/$2 +echo -n -e 'ui_print\n' > /proc/self/fd/$2 diff --git a/create_ota.sh b/create_ota.sh new file mode 100755 index 000000000..e07a2275f --- /dev/null +++ b/create_ota.sh @@ -0,0 +1,79 @@ +#!/bin/bash +# +# Script to prepare an update.zip containing F-Droid + +set -e + +PROG_DIR=$(dirname $(realpath $0)) + +TMP_DIR=$(mktemp -d -t fdroidclient.tmp.XXXXXXXX) +trap "rm -rf $TMP_DIR" EXIT + +function error() { + echo "*** ERROR: " $@ + usage +} + +function usage() { + cat << EOFU +Usage: $0 variant +where: + - variant is one of: debug, release, or binary +EOFU + exit 1 +} + +# Parse input +VARIANT="$1" +[[ -z "$VARIANT" ]] && error "Missing variant" + +BINARIES="$2" + +GPG="gpg --keyring $PROG_DIR/f-droid.org-signing-key.gpg --no-default-keyring --trust-model always" + +GITVERSION=$(git describe --tags --always) + +FDROID_APK=F-Droid.apk + +# Collect files +mkdir -p $TMP_DIR/META-INF/com/google/android/ +cp app/src/main/scripts/update-binary $TMP_DIR/META-INF/com/google/android/ + +if [ $VARIANT == "binary" ] ; then + curl -L https://f-droid.org/$FDROID_APK > $TMP_DIR/$FDROID_APK + curl -L https://f-droid.org/${FDROID_APK}.asc > $TMP_DIR/${FDROID_APK}.asc + $GPG --verify $TMP_DIR/${FDROID_APK}.asc + rm $TMP_DIR/${FDROID_APK}.asc +else + cd $PROG_DIR + ./gradlew assemble$(echo $VARIANT | tr 'dr' 'DR') + OUT_DIR=$PROG_DIR/app/build/outputs/apk + if [ $VARIANT == "debug" ]; then + cp $OUT_DIR/app-${VARIANT}.apk \ + $TMP_DIR/$FDROID_APK + elif [ -f $OUT_DIR/app-${VARIANT}-signed.apk ]; then + cp $OUT_DIR/app-${VARIANT}-signed.apk \ + $TMP_DIR/$FDROID_APK + else + cp $OUT_DIR/app-${VARIANT}-unsigned.apk \ + $TMP_DIR/$FDROID_APK + fi +fi + +# Make zip +if [ $VARIANT == "binary" ] ; then + ZIPBASE=F-DroidFromBinaries-${GITVERSION} +else + ZIPBASE=F-Droid-${GITVERSION} +fi +if [ $VARIANT == "debug" ]; then + ZIP=${ZIPBASE}-debug.zip +else + ZIP=${ZIPBASE}.zip +fi +OUT_DIR=$PROG_DIR/app/build/distributions +mkdir -p $OUT_DIR +[ -f $OUT_DIR/$ZIP ] && rm -f $OUT_DIR/$ZIP +pushd $TMP_DIR +zip -r $OUT_DIR/$ZIP . +popd diff --git a/f-droid.org-signing-key.gpg b/f-droid.org-signing-key.gpg new file mode 100644 index 0000000000000000000000000000000000000000..16f1f017acb1872f6ff074a434f23edcb1427207 GIT binary patch literal 8022 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 Qtc`K^Yc0p@*XmRKKg*Z)#Q*>R literal 0 HcmV?d00001