Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fc17494 authored by Gabriele M's avatar Gabriele M
Browse files

Updater: Android Studio support

See README-STUDIO.txt for more info.

Change-Id: Ie673bba5618b0f00a585049cd85687a64db2b420
parent 7005b005
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+13 −0
Original line number Diff line number Diff line
*.iml
.gradle
/local.properties
.idea
.DS_Store
/build
/captures
/gradle
/gradlew
/gradlew.bat
/system_libs/*.jar
/keystore.properties
*.jks
+21 −0
Original line number Diff line number Diff line
@@ -35,3 +35,24 @@ LOCAL_PRIVILEGED_MODULE := true
LOCAL_PROGUARD_FLAG_FILES := proguard.flags

include $(BUILD_PACKAGE)


include $(CLEAR_VARS)
LOCAL_MODULE := UpdaterStudio
LOCAL_MODULE_CLASS := FAKE
LOCAL_MODULE_SUFFIX := -timestamp
updater_system_deps := $(call java-lib-deps,framework)
updater_system_libs_path := $(abspath $(LOCAL_PATH))/system_libs

include $(BUILD_SYSTEM)/base_rules.mk

.PHONY: copy_updater_system_deps
copy_updater_system_deps: $(updater_system_deps)
	$(hide) mkdir -p $(updater_system_libs_path)
	$(hide) rm -rf $(updater_system_libs_path)/*.jar
	$(hide) cp $(updater_system_deps) $(updater_system_libs_path)/framework.jar

$(LOCAL_BUILT_MODULE): copy_updater_system_deps
	$(hide) echo "Fake: $@"
	$(hide) mkdir -p $(dir $@)
	$(hide) touch $@

README-STUDIO.txt

0 → 100644
+14 −0
Original line number Diff line number Diff line
How to build with Android Studio
================================

Updater needs access to the system API, therefore it can't be built only using
the public SDK. You first need to generate the libraries with all the needed
classes. The application also needs elevated privileges, so you need to sign
it with the right key to update the one in the system partition. To do this:

 - Generate a keystore and keystore.properties using gen-keystore.sh
 - Build the dependencies running 'make UpdaterStudio'. This command will add
   the needed libraries in system_libraries/.

You need to do the above once, unless Android Studio can't find some symbol.
In this case, rebuild the system libraries with 'make UpdaterStudio'.

build.gradle

0 → 100644
+70 −0
Original line number Diff line number Diff line
repositories {
    google()
    jcenter()
}

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion '26.0.3'

    defaultConfig {
        minSdkVersion 24
        targetSdkVersion 24
    }

    lintOptions {
        ignore 'ProtectedPermissions'
        // These depend on translations
        ignore 'ExtraTranslation', 'ImpliedQuantity', 'MissingQuantity', 'MissingTranslation'
    }

    sourceSets {
        main {
            res.srcDirs = ['res']
            java.srcDirs = ['src']
            manifest.srcFile 'AndroidManifest.xml'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    signingConfigs {
        debug {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }
}

dependencies {
    compileOnly fileTree(dir: 'system_libs/', include: ['*.jar'])

    def supportLibVersion = "24.2.1"
    implementation "com.android.support:appcompat-v7:${supportLibVersion}"
    implementation "com.android.support:cardview-v7:${supportLibVersion}"
    implementation "com.android.support:design:${supportLibVersion}"
    implementation "com.android.support:preference-v7:${supportLibVersion}"
    implementation "com.android.support:recyclerview-v7:${supportLibVersion}"
}

gen-keystore.sh

0 → 100755
+67 −0
Original line number Diff line number Diff line
#!/bin/sh

if [ $# -ne 6 ]; then
    echo "Usage: `basename $0` PRIVATE_KEY CERTIFICATE \\"
    echo "          KEYSTORE_PASSWRD KEY_PASSWORD KEY_ALIAS \\"
    echo "          OUTPUT_KEYSTORE_PATH"
    echo
    echo "Example:"
    echo "  `basename $0` \\"
    echo "          ../../../build/target/product/security/testkey.pk8 \\"
    echo "          ../../../build/target/product/security/testkey.x509.pem \\"
    echo "          keystore-password key-password android testkey.jks"
    exit 0
fi

PRIVATE_KEY="$1"
CERTIFICATE="$2"
KEYSTORE_PASSWORD="$3"
KEY_PASSWORD="$4"
KEY_ALIAS="$5"
KEYSTORE_PATH="$6"

if [ -f "$KEYSTORE_PATH" ]; then
    echo "$KEYSTORE_PATH already exists"
    exit 1
fi

tmpdir=`mktemp -d`
trap 'rm -rf $tmpdir;' 0

key="$tmpdir/platform.key"
pk12="$tmpdir/platform.pk12"
openssl pkcs8 -in "$PRIVATE_KEY" -inform DER -outform PEM -nocrypt -out "$key"
if [ $? -ne 0 ]; then
    exit 1
fi
openssl pkcs12 -export -in "$CERTIFICATE" -inkey "$key" -name "$KEY_ALIAS" \
    -out "$pk12" -password pass:"$KEY_PASSWORD"
if [ $? -ne 0 ]; then
    exit 1
fi

keytool -importkeystore \
    -srckeystore "$pk12" -srcstoretype pkcs12 -srcstorepass "$KEY_PASSWORD" \
    -destkeystore "$KEYSTORE_PATH" -deststorepass "$KEYSTORE_PASSWORD" \
    -destkeypass "$KEY_PASSWORD"
if [ $? -ne 0 ]; then
    exit 1
fi


echo
echo "Generating keystore.properties..."
if [ -f keystore.properties ]; then
    echo "keystore.properties already exists, overwrite it? [Y/n]"
    read reply
    if [ "$reply" = "n" -o "$reply" = "N" ]; then
        exit 0
    fi
fi

cat > keystore.properties <<EOF
keyAlias=$KEY_ALIAS
keyPassword=$KEY_PASSWORD
storeFile=$KEYSTORE_PATH
storePassword=$KEYSTORE_PASSWORD
EOF
Loading