Compare commits
14 Commits
45a36523ac
...
master
Author | SHA1 | Date | |
---|---|---|---|
be36ea7105 | |||
a2c1a28d6f | |||
|
581d2e5fe4 | ||
|
f504760d3c | ||
|
761206bc33 | ||
|
c3477ab2b8 | ||
|
765749285c | ||
|
0594cee1c8 | ||
|
210c61bc40 | ||
|
0f82fa4ec0 | ||
|
cfb34985d9 | ||
|
1fd9552a8e | ||
|
122b0a20a0 | ||
|
2c4778041d |
24
.github/workflows/updater.yml
vendored
24
.github/workflows/updater.yml
vendored
@@ -1,24 +0,0 @@
|
|||||||
name: Updater
|
|
||||||
on:
|
|
||||||
schedule:
|
|
||||||
- cron: '37 13 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
jobs:
|
|
||||||
Update-Apks:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
distribution: 'temurin'
|
|
||||||
java-version: '17'
|
|
||||||
- run: pipx install pipenv
|
|
||||||
- uses: actions/setup-python@v4
|
|
||||||
with:
|
|
||||||
python-version: '3.9'
|
|
||||||
cache: 'pipenv'
|
|
||||||
cache-dependency-path: 'updater/Pipfile.lock'
|
|
||||||
- run: pipenv install
|
|
||||||
working-directory: updater
|
|
||||||
- run: pipenv run python main.py
|
|
||||||
working-directory: updater
|
|
@@ -1 +0,0 @@
|
|||||||
1021051
|
|
@@ -1,13 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := FDroid
|
|
||||||
LOCAL_SRC_FILES := FDroid.apk
|
|
||||||
LOCAL_MODULE_CLASS := APPS
|
|
||||||
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
||||||
LOCAL_CERTIFICATE := PRESIGNED
|
|
||||||
# these lines may break builds before 19.1 so make them conditional
|
|
||||||
ifneq ($(call math_gt_or_eq, $(PLATFORM_SDK_VERSION), 31),)
|
|
||||||
LOCAL_OPTIONAL_USES_LIBRARIES := androidx.window.extensions androidx.window.sidecar
|
|
||||||
endif
|
|
||||||
LOCAL_PRODUCT_MODULE := true
|
|
||||||
include $(BUILD_PREBUILT)
|
|
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
2130
|
|
@@ -1,20 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := privapp-permissions-org.fdroid.fdroid.privileged.xml
|
|
||||||
LOCAL_MODULE_CLASS := ETC
|
|
||||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/permissions
|
|
||||||
LOCAL_SRC_FILES := $(LOCAL_MODULE)
|
|
||||||
include $(BUILD_PREBUILT)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := FDroidPrivilegedExtension
|
|
||||||
LOCAL_SRC_FILES := FDroidPrivilegedExtension.apk
|
|
||||||
LOCAL_MODULE_CLASS := APPS
|
|
||||||
LOCAL_PRIVILEGED_MODULE := true
|
|
||||||
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
||||||
LOCAL_CERTIFICATE := PRESIGNED
|
|
||||||
LOCAL_REQUIRED_MODULES := privapp-permissions-org.fdroid.fdroid.privileged.xml
|
|
||||||
LOCAL_PRODUCT_MODULE := true
|
|
||||||
include $(BUILD_PREBUILT)
|
|
||||||
|
|
Binary file not shown.
@@ -1,7 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<permissions>
|
|
||||||
<privapp-permissions package="org.fdroid.fdroid.privileged">
|
|
||||||
<permission name="android.permission.DELETE_PACKAGES"/>
|
|
||||||
<permission name="android.permission.INSTALL_PACKAGES"/>
|
|
||||||
</privapp-permissions>
|
|
||||||
</permissions>
|
|
@@ -1 +0,0 @@
|
|||||||
84022612
|
|
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
244735012
|
|
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
8
|
|
@@ -1 +0,0 @@
|
|||||||
20036
|
|
@@ -1,9 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := IchnaeaNlpBackend
|
|
||||||
LOCAL_SRC_FILES := IchnaeaNlpBackend.apk
|
|
||||||
LOCAL_MODULE_CLASS := APPS
|
|
||||||
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
||||||
LOCAL_CERTIFICATE := PRESIGNED
|
|
||||||
LOCAL_PRODUCT_MODULE := true
|
|
||||||
include $(BUILD_PREBUILT)
|
|
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
20042
|
|
@@ -1,9 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := NominatimGeocoderBackend
|
|
||||||
LOCAL_SRC_FILES := NominatimGeocoderBackend.apk
|
|
||||||
LOCAL_MODULE_CLASS := APPS
|
|
||||||
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
|
|
||||||
LOCAL_CERTIFICATE := PRESIGNED
|
|
||||||
LOCAL_PRODUCT_MODULE := true
|
|
||||||
include $(BUILD_PREBUILT)
|
|
Binary file not shown.
17
README.md
17
README.md
@@ -1,3 +1,7 @@
|
|||||||
|
# This is fork of lineageos4microg/android_vendor_partner_gms
|
||||||
|
|
||||||
|
Refer to https://github.com/lineageos4microg/android_vendor_partner_gms to get original repo.
|
||||||
|
|
||||||
# microG Mobile Services
|
# microG Mobile Services
|
||||||
|
|
||||||
This is a collection of FOSS APKs, coupled with the respective Makefiles for an
|
This is a collection of FOSS APKs, coupled with the respective Makefiles for an
|
||||||
@@ -15,9 +19,9 @@ Example manifest:
|
|||||||
</manifest>
|
</manifest>
|
||||||
```
|
```
|
||||||
|
|
||||||
Note 1. You do not need to set `CUSTOM_PACKAGES` for the packages to be included when building with [our Docker engine](https://github.com/lineageos4microg/docker-lineage-cicd).
|
Note 1. You do not need to set `CUSTOM_PACKAGES` for the packages to be included when building with [our Docker engine](https://github.com/lineageos4microg/docker-lineage-cicd). LineageOS did not make those changes in the 17.1 branch, so to make a 17.1 build, you will need to apply the changes to `AndroidManifest.xml` and `strings.xml` from [the Android Q LOS 17.1 branch-specific patch](https://github.com/lineageos4microg/docker-lineage-cicd/blob/35b7190bda4f2988845f09e028d266a23fd8b559/src/signature_spoofing_patches/android_frameworks_base-Q.patch). You do not need to apply the other changes in that patch. (See [this issue, and all it's comments](https://github.com/lineageos4microg/android_vendor_partner_gms/issues/42#issuecomment-2674105896) for more information about this)
|
||||||
|
|
||||||
Note 2. LineageOS now support ***restricted*** signature spoofing, so it is no longer neccessary to patch their sources, unless you want ***unrestricted*** signature spoofing
|
Note 2. LineageOS now support ***restricted*** signature spoofing, in 18.1 and later branches, so it is no longer neccessary to patch their sources, unless you want ***unrestricted*** signature spoofing
|
||||||
~~For the microG packages to work, signature spoofing must be enabled, by patching the LineageOS sources before building.~~
|
~~For the microG packages to work, signature spoofing must be enabled, by patching the LineageOS sources before building.~~
|
||||||
- ~~If you are building with [our Docker engine](https://github.com/lineageos4microg/docker-lineage-cicd), this is done automatically according to the values of the `SIGNATURE_SPOOFING` variable - see [here](https://github.com/lineageos4microg/docker-lineage-cicd#signature-spoofing). By default, this variable is set to `restricted`, allowing only system apps (those built-in to the ROM) to 'spoof' the signature of another app.~~
|
- ~~If you are building with [our Docker engine](https://github.com/lineageos4microg/docker-lineage-cicd), this is done automatically according to the values of the `SIGNATURE_SPOOFING` variable - see [here](https://github.com/lineageos4microg/docker-lineage-cicd#signature-spoofing). By default, this variable is set to `restricted`, allowing only system apps (those built-in to the ROM) to 'spoof' the signature of another app.~~
|
||||||
- ~~If you are building manually, you can download and include the patches from [here](https://github.com/lineageos4microg/docker-lineage-cicd/tree/master/src/signature_spoofing_patches). If you follow the [microG patching instructions](https://github.com/microg/GmsCore/wiki/Signature-Spoofing), you ROM will allow _**any**_ app, not only system apps, to spoof app signatures. To apply only 'restricted' signature spoofing, you should do something similar to what the Docker engine `build.sh` does in [this code](https://github.com/lineageos4microg/docker-lineage-cicd/blob/c77eabe036a1620499a8c087b732e039e0734656/src/build.sh#L229C1-L231C1).~~
|
- ~~If you are building manually, you can download and include the patches from [here](https://github.com/lineageos4microg/docker-lineage-cicd/tree/master/src/signature_spoofing_patches). If you follow the [microG patching instructions](https://github.com/microg/GmsCore/wiki/Signature-Spoofing), you ROM will allow _**any**_ app, not only system apps, to spoof app signatures. To apply only 'restricted' signature spoofing, you should do something similar to what the Docker engine `build.sh` does in [this code](https://github.com/lineageos4microg/docker-lineage-cicd/blob/c77eabe036a1620499a8c087b732e039e0734656/src/build.sh#L229C1-L231C1).~~
|
||||||
@@ -38,16 +42,9 @@ The symptoms of the problem as some apps from this repo (e.g. FakeStore and GmsC
|
|||||||
---------------
|
---------------
|
||||||
|
|
||||||
The included APKs are:
|
The included APKs are:
|
||||||
* FDroid packages (binaries sourced from [here](https://f-droid.org/packages/org.fdroid.fdroid/) and [here](https://f-droid.org/packages/org.fdroid.fdroid.privileged/))
|
|
||||||
* FDroid: a catalogue of FOSS (Free and Open Source Software) applications for the Android platform
|
|
||||||
* FDroid Privileged Extension: a FDroid extension to ease the installation/removal of apps
|
|
||||||
* additional_repos.xml: a simple package to include the [microG FDroid repository](https://microg.org/fdroid.html) in the ROM (requires FDroid >= 1.5)
|
|
||||||
* microG packages (binaries sourced from [here](https://microg.org/download.html))
|
* microG packages (binaries sourced from [here](https://microg.org/download.html))
|
||||||
* GmsCore: the main component of microG, a FOSS reimplementation of the Google Play Services (requires GsfProxy and FakeStore for full functionality)
|
* GmsCore: the main component of microG, a FOSS reimplementation of the Google Play Services (requires GsfProxy and FakeStore for full functionality)
|
||||||
* GsfProxy: a GmsCore proxy for legacy GCM compatibility
|
* GsfProxy: a GmsCore proxy for legacy GCM compatibility
|
||||||
* FakeStore: an empty package that mocks the existence of the Google Play Store
|
* FakeStore: an empty package that mocks the existence of the Google Play Store
|
||||||
* IchnaeaNlpBackend: Network location provider using Mozilla Location Service
|
|
||||||
* NominatimGeocoderBackend: Geocoder backend that uses OSM Nominatim service.
|
|
||||||
|
|
||||||
These are official unmodified prebuilt binaries, signed by the
|
These are official unmodified prebuilt binaries, signed by the corresponding developers.
|
||||||
corresponding developers.
|
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
LOCAL_MODULE := additional_repos.xml
|
|
||||||
LOCAL_MODULE_CLASS := ETC
|
|
||||||
LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT_ETC)/org.fdroid.fdroid
|
|
||||||
LOCAL_SRC_FILES := additional_repos.xml
|
|
||||||
include $(BUILD_PREBUILT)
|
|
||||||
|
|
@@ -1,34 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string-array name="additional_repos">
|
|
||||||
<!-- name -->
|
|
||||||
<item>microG F-Droid repo</item>
|
|
||||||
<!-- address -->
|
|
||||||
<item>https://microg.org/fdroid/repo</item>
|
|
||||||
<!-- description -->
|
|
||||||
<item>This is a repository of microG apps to be used with F-Droid. Applications in this repository are signed official binaries built by the microG Team from the corresponding source code.</item>
|
|
||||||
<!-- version -->
|
|
||||||
<item>19</item>
|
|
||||||
<!-- enabled -->
|
|
||||||
<item>1</item>
|
|
||||||
<!-- push requests -->
|
|
||||||
<item>ignore</item>
|
|
||||||
<!-- pubkey -->
|
|
||||||
<item>308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37</item>
|
|
||||||
|
|
||||||
<!-- name -->
|
|
||||||
<item>microG F-Droid archive</item>
|
|
||||||
<!-- address -->
|
|
||||||
<item>https://microg.org/fdroid/archive</item>
|
|
||||||
<!-- description -->
|
|
||||||
<item>The repository of older versions of applications from the main repository.</item>
|
|
||||||
<!-- version -->
|
|
||||||
<item>19</item>
|
|
||||||
<!-- enabled -->
|
|
||||||
<item>0</item>
|
|
||||||
<!-- push requests -->
|
|
||||||
<item>ignore</item>
|
|
||||||
<!-- pubkey -->
|
|
||||||
<item>308202ed308201d5a003020102020426ffa009300d06092a864886f70d01010b05003027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a656374301e170d3132313030363132303533325a170d3337303933303132303533325a3027310b300906035504061302444531183016060355040a130f4e4f47415050532050726f6a65637430820122300d06092a864886f70d01010105000382010f003082010a02820101009a8d2a5336b0eaaad89ce447828c7753b157459b79e3215dc962ca48f58c2cd7650df67d2dd7bda0880c682791f32b35c504e43e77b43c3e4e541f86e35a8293a54fb46e6b16af54d3a4eda458f1a7c8bc1b7479861ca7043337180e40079d9cdccb7e051ada9b6c88c9ec635541e2ebf0842521c3024c826f6fd6db6fd117c74e859d5af4db04448965ab5469b71ce719939a06ef30580f50febf96c474a7d265bb63f86a822ff7b643de6b76e966a18553c2858416cf3309dd24278374bdd82b4404ef6f7f122cec93859351fc6e5ea947e3ceb9d67374fe970e593e5cd05c905e1d24f5a5484f4aadef766e498adf64f7cf04bddd602ae8137b6eea40722d0203010001a321301f301d0603551d0e04160414110b7aa9ebc840b20399f69a431f4dba6ac42a64300d06092a864886f70d01010b0500038201010007c32ad893349cf86952fb5a49cfdc9b13f5e3c800aece77b2e7e0e9c83e34052f140f357ec7e6f4b432dc1ed542218a14835acd2df2deea7efd3fd5e8f1c34e1fb39ec6a427c6e6f4178b609b369040ac1f8844b789f3694dc640de06e44b247afed11637173f36f5886170fafd74954049858c6096308fc93c1bc4dd5685fa7a1f982a422f2a3b36baa8c9500474cf2af91c39cbec1bc898d10194d368aa5e91f1137ec115087c31962d8f76cd120d28c249cf76f4c70f5baa08c70a7234ce4123be080cee789477401965cfe537b924ef36747e8caca62dfefdd1a6288dcb1c4fd2aaa6131a7ad254e9742022cfd597d2ca5c660ce9e41ff537e5a4041e37</item>
|
|
||||||
</string-array>
|
|
||||||
</resources>
|
|
@@ -2,8 +2,3 @@ PRODUCT_PACKAGES += \
|
|||||||
GmsCore \
|
GmsCore \
|
||||||
GsfProxy \
|
GsfProxy \
|
||||||
FakeStore \
|
FakeStore \
|
||||||
IchnaeaNlpBackend \
|
|
||||||
NominatimGeocoderBackend \
|
|
||||||
FDroid \
|
|
||||||
FDroidPrivilegedExtension \
|
|
||||||
additional_repos.xml
|
|
||||||
|
3
updater/.gitignore
vendored
3
updater/.gitignore
vendored
@@ -1,3 +0,0 @@
|
|||||||
/.idea
|
|
||||||
/*.iml
|
|
||||||
__pycache__
|
|
@@ -1,12 +0,0 @@
|
|||||||
[[source]]
|
|
||||||
url = "https://pypi.org/simple"
|
|
||||||
verify_ssl = true
|
|
||||||
name = "pypi"
|
|
||||||
|
|
||||||
[packages]
|
|
||||||
requests-cache = "==0.9.1"
|
|
||||||
|
|
||||||
[dev-packages]
|
|
||||||
|
|
||||||
[requires]
|
|
||||||
python_version = "3.9"
|
|
107
updater/Pipfile.lock
generated
107
updater/Pipfile.lock
generated
@@ -1,107 +0,0 @@
|
|||||||
{
|
|
||||||
"_meta": {
|
|
||||||
"hash": {
|
|
||||||
"sha256": "43267acd3e0a2938456d3924e25339a1da500cb295a1afee2e8a41843ba8af63"
|
|
||||||
},
|
|
||||||
"pipfile-spec": 6,
|
|
||||||
"requires": {
|
|
||||||
"python_version": "3.9"
|
|
||||||
},
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"name": "pypi",
|
|
||||||
"url": "https://pypi.org/simple",
|
|
||||||
"verify_ssl": true
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"default": {
|
|
||||||
"appdirs": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41",
|
|
||||||
"sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"
|
|
||||||
],
|
|
||||||
"version": "==1.4.4"
|
|
||||||
},
|
|
||||||
"attrs": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4",
|
|
||||||
"sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
|
|
||||||
"version": "==21.4.0"
|
|
||||||
},
|
|
||||||
"cattrs": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:211800f725cdecedcbcf4c753bbd22d248312b37d130f06045434acb7d9b34e1",
|
|
||||||
"sha256:35dd9063244263e63bd0bd24ea61e3015b00272cead084b2c40d788b0f857c46"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '3.7' and python_version < '4.0'",
|
|
||||||
"version": "==1.10.0"
|
|
||||||
},
|
|
||||||
"certifi": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872",
|
|
||||||
"sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"
|
|
||||||
],
|
|
||||||
"version": "==2021.10.8"
|
|
||||||
},
|
|
||||||
"charset-normalizer": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45",
|
|
||||||
"sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '3'",
|
|
||||||
"version": "==2.0.11"
|
|
||||||
},
|
|
||||||
"idna": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff",
|
|
||||||
"sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '3'",
|
|
||||||
"version": "==3.3"
|
|
||||||
},
|
|
||||||
"requests": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61",
|
|
||||||
"sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
|
|
||||||
"version": "==2.27.1"
|
|
||||||
},
|
|
||||||
"requests-cache": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:3e3384c48dca231ee4c49e7ba53162bc0d99e16721baf085bfba1552d065d151",
|
|
||||||
"sha256:7737f83f0f48481a904bb9a9402233db5090931e46f9644c502646a573848d35"
|
|
||||||
],
|
|
||||||
"index": "pypi",
|
|
||||||
"version": "==0.9.1"
|
|
||||||
},
|
|
||||||
"six": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926",
|
|
||||||
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
|
|
||||||
"version": "==1.16.0"
|
|
||||||
},
|
|
||||||
"url-normalize": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:d23d3a070ac52a67b83a1c59a0e68f8608d1cd538783b401bc9de2c0fac999b2",
|
|
||||||
"sha256:ec3c301f04e5bb676d333a7fa162fa977ad2ca04b7e652bfc9fac4e405728eed"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'",
|
|
||||||
"version": "==1.4.3"
|
|
||||||
},
|
|
||||||
"urllib3": {
|
|
||||||
"hashes": [
|
|
||||||
"sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed",
|
|
||||||
"sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"
|
|
||||||
],
|
|
||||||
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4.0'",
|
|
||||||
"version": "==1.26.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"develop": {}
|
|
||||||
}
|
|
@@ -1,11 +0,0 @@
|
|||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
def get_apk_certificate(file: str):
|
|
||||||
output = subprocess.check_output(['keytool', '-printcert', '-rfc', '-jarfile', file], text=True)
|
|
||||||
lines = output.split("\n")
|
|
||||||
return '\n'.join(lines[
|
|
||||||
lines.index('-----BEGIN CERTIFICATE-----'):
|
|
||||||
(lines.index('-----END CERTIFICATE-----')+1)
|
|
||||||
])
|
|
||||||
|
|
@@ -1,17 +0,0 @@
|
|||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
user_name = 'Updater Robot'
|
|
||||||
user_email = 'robot@nowhere.invalid'
|
|
||||||
|
|
||||||
|
|
||||||
def add_commit_push(directory: str, message: str):
|
|
||||||
diff = subprocess.run(['git', 'diff', '--cached', '--exit-code'], capture_output=True, text=True)
|
|
||||||
if diff.returncode != 0:
|
|
||||||
status = subprocess.run(['git', 'status'], capture_output=True, text=True)
|
|
||||||
raise Exception('Unknown staged changes found: {}'.format(status.stdout))
|
|
||||||
|
|
||||||
subprocess.run(['git', 'add', '--all', directory], check=True)
|
|
||||||
subprocess.run(['git', '-c', 'user.name={}'.format(user_name), '-c', 'user.email={}'.format(user_email),
|
|
||||||
'commit', '--message', message])
|
|
||||||
subprocess.run(['git', 'push'])
|
|
@@ -1,47 +0,0 @@
|
|||||||
import urllib.request
|
|
||||||
from os import path
|
|
||||||
|
|
||||||
import certificates
|
|
||||||
import git
|
|
||||||
from sources import ApkRelease, fdroid_recommended_release
|
|
||||||
|
|
||||||
|
|
||||||
def update_if_needed(module: str, release: ApkRelease):
|
|
||||||
module_dir = path.abspath(path.join(path.dirname(__file__), '..', module))
|
|
||||||
with open(path.join(module_dir, '.version_code'), 'r+') as version_code_file:
|
|
||||||
version_code = int(version_code_file.read())
|
|
||||||
if version_code < release.version_code:
|
|
||||||
print('updating {} to {}'.format(module, release.version_name))
|
|
||||||
apk_filename = path.join(module_dir, '{}.apk'.format(module))
|
|
||||||
|
|
||||||
old_sig = certificates.get_apk_certificate(apk_filename)
|
|
||||||
|
|
||||||
print('downloading {} ...'.format(release.download_url))
|
|
||||||
urllib.request.urlretrieve(release.download_url, apk_filename)
|
|
||||||
|
|
||||||
new_sig = certificates.get_apk_certificate(apk_filename)
|
|
||||||
if old_sig != new_sig:
|
|
||||||
raise Exception('Signature mismatch for {} old sig: {} new sig: {}'.format(module, old_sig, new_sig))
|
|
||||||
|
|
||||||
version_code_file.seek(0)
|
|
||||||
version_code_file.write(str(release.version_code))
|
|
||||||
version_code_file.truncate()
|
|
||||||
version_code_file.close()
|
|
||||||
|
|
||||||
print('commit and push...')
|
|
||||||
git.add_commit_push(module_dir, 'Update {} to {}'.format(module, release.version_name))
|
|
||||||
|
|
||||||
elif version_code > release.version_code:
|
|
||||||
print('{} ahead of suggested version ({} > {})'.format(module, version_code, release.version_code))
|
|
||||||
elif version_code == release.version_code:
|
|
||||||
print('{} up to date.'.format(module))
|
|
||||||
|
|
||||||
fdroid_main_repo = 'https://www.f-droid.org/repo'
|
|
||||||
fdroid_microg_repo = 'https://microg.org/fdroid/repo'
|
|
||||||
|
|
||||||
update_if_needed('FakeStore', fdroid_recommended_release(fdroid_microg_repo, 'com.android.vending'))
|
|
||||||
update_if_needed('FDroid', fdroid_recommended_release(fdroid_main_repo, 'org.fdroid.fdroid'))
|
|
||||||
update_if_needed('FDroidPrivilegedExtension', fdroid_recommended_release(fdroid_main_repo, 'org.fdroid.fdroid.privileged'))
|
|
||||||
update_if_needed('GmsCore', fdroid_recommended_release(fdroid_microg_repo, 'com.google.android.gms'))
|
|
||||||
update_if_needed('GsfProxy', fdroid_recommended_release(fdroid_microg_repo, 'com.google.android.gsf'))
|
|
||||||
update_if_needed('NominatimGeocoderBackend', fdroid_recommended_release(fdroid_main_repo, 'org.microg.nlp.backend.nominatim'))
|
|
@@ -1,38 +0,0 @@
|
|||||||
from xml.dom import minidom, pulldom
|
|
||||||
|
|
||||||
import requests_cache
|
|
||||||
|
|
||||||
requests_session = requests_cache.CachedSession('updater', backend='memory')
|
|
||||||
|
|
||||||
|
|
||||||
class ApkRelease:
|
|
||||||
version_name: str
|
|
||||||
version_code: int
|
|
||||||
download_url: str
|
|
||||||
|
|
||||||
def __init__(self, version_name: str, version_code: int, download_url: str):
|
|
||||||
self.version_name = version_name
|
|
||||||
self.version_code = version_code
|
|
||||||
self.download_url = download_url
|
|
||||||
|
|
||||||
|
|
||||||
def _child_el_content(el: minidom.Element, tag_name: str):
|
|
||||||
return el.getElementsByTagName(tag_name).item(0).firstChild.data
|
|
||||||
|
|
||||||
|
|
||||||
def fdroid_recommended_release(repo: str, application_id: str):
|
|
||||||
with requests_session.get('{}/index.xml'.format(repo)) as r:
|
|
||||||
doc = pulldom.parseString(r.text)
|
|
||||||
for event, node in doc:
|
|
||||||
if event == pulldom.START_ELEMENT and node.tagName == 'application':
|
|
||||||
if node.getAttribute('id') == application_id:
|
|
||||||
doc.expandNode(node)
|
|
||||||
marketvercode = _child_el_content(node, 'marketvercode')
|
|
||||||
for p in node.getElementsByTagName('package'):
|
|
||||||
if _child_el_content(p, 'versioncode') == marketvercode:
|
|
||||||
return ApkRelease(
|
|
||||||
_child_el_content(p, 'version'),
|
|
||||||
int(marketvercode),
|
|
||||||
'{}/{}'.format(repo, _child_el_content(p, 'apkname'))
|
|
||||||
)
|
|
||||||
raise Exception('Did not find {} in repo {}'.format(application_id, repo))
|
|
Reference in New Issue
Block a user