blob: 22178abe9778f8e87e3d6720c914edf9e45b3494 [file] [log] [blame]
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +01001#!/bin/bash
Jon West1c44e902021-04-01 19:29:47 -04002#~ set -e
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +01003
Jon West9fd0d662021-04-01 16:07:30 -04004RED='\033[0;31m'
5GREEN='\033[0;32m'
6YELLOW='\033[0;33m'
7LT_BLUE='\033[0;34m'
8
9NC='\033[0m' # No Color
10
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +010011repo="https://f-droid.org/repo/"
Jon West0d65aa82021-04-04 19:55:11 -040012repo2="https://bubu1.eu/fdroid/repo/"
13repo3="https://fdroid.tetaneutral.net/fdroid/repo/"
14repo4="https://mirror.cyberbits.eu/fdroid/repo/"
15repo5="https://ftp.fau.de/fdroid/repo/"
16repo6="https://ftp.osuosl.org/pub/fdroid/repo/"
17repo7="https://mirror.scd31.com/fdroid/repo/"
18repo8="https://plug-mirror.rcac.purdue.edu/fdroid/repo/"
19repo9="https://mirrors.tuna.tsinghua.edu.cn/fdroid/repo/"
20repo10="https://mirrors.nju.edu.cn/fdroid/repo/"
21repo11="https://mirror.kumi.systems/fdroid/repo/"
22repo12="https://ftp.lysator.liu.se/pub/fdroid/repo/"
23repo13="https://mirror.librelabucm.org/fdroid/repo/"
24
25microg="https://microg.org/fdroid/repo"
26microg_dir="tmp/microg"
27
28nanolx="https://nanolx.org/fdroid/repo"
29nanolx_dir="tmp/nanolx"
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +010030
Jon West81cd34f2021-04-01 19:30:33 -040031# Device type selection
32PS3='Which device type do you plan on building?: '
Jon West0d65aa82021-04-04 19:55:11 -040033echo -e ${YELLOW}"(default is 'ABI:x86_64 & ABI2:x86')"
Jon West81cd34f2021-04-01 19:30:33 -040034TMOUT=10
35options=("ABI:x86_64 & ABI2:x86"
36 "ABI:arm64-v8a & ABI2:armeabi-v7a")
Jon West0d65aa82021-04-04 19:55:11 -040037echo -e "Timeout in $TMOUT sec."${NC}
Jon West81cd34f2021-04-01 19:30:33 -040038select opt in "${options[@]}"
39do
40 case $opt in
41 "ABI:x86_64 & ABI2:x86")
42 echo "you chose choice $REPLY which is $opt"
43 MAIN_ARCH="x86_64"
44 SUB_ARCH="x86"
45 break
46 ;;
47 "ABI:arm64-v8a & ABI2:armeabi-v7a")
48 echo "you chose choice $REPLY which is $opt"
49 MAIN_ARCH="arm64-v8a"
50 SUB_ARCH="armeabi-v7a"
51 break
52 ;;
53 *) echo "invalid option $REPLY";;
54 esac
55done
56if [ "$opt" == "" ]; then
57 MAIN_ARCH="x86_64"
58 SUB_ARCH="x86"
59fi
Jon West1c44e902021-04-01 19:29:47 -040060
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +010061addCopy() {
Pierre-Hugues Husson16644af2020-04-05 16:08:40 +020062 addition=""
Jon West1c44e902021-04-01 19:29:47 -040063 if [ "$native" != "" ]
64 then
65 unzip bin/$1 "lib/*"
66 if [ "$native" == "$MAIN_ARCH" ];then
67 addition="
68LOCAL_PREBUILT_JNI_LIBS := \\
69$(unzip -lv bin/$1 |grep -v Stored |sed -nE 's;.*(lib/'"$MAIN_ARCH"'/.*);\t\1 \\;p')
70 "
71 fi
72 if [ "$native" == "$SUB_ARCH" ];then
73 addition="
74LOCAL_MULTILIB := 32
75LOCAL_PREBUILT_JNI_LIBS := \\
76$(unzip -lv bin/$1 |grep -v Stored |sed -nE 's;.*(lib/'"$SUB_ARCH"'/.*);\t\1 \\;p')
77 "
78 fi
79 fi
Pierre-Hugues Hussone1b56f52020-11-03 18:15:49 +010080 if [ "$2" == com.google.android.gms ] || [ "$2" == com.android.vending ] ;then
81 addition="LOCAL_PRIVILEGED_MODULE := true"
82 fi
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +010083cat >> Android.mk <<EOF
84include \$(CLEAR_VARS)
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +010085LOCAL_MODULE := $2
86LOCAL_MODULE_TAGS := optional
87LOCAL_SRC_FILES := bin/$1
88LOCAL_MODULE_CLASS := APPS
Pierre-Hugues Hussonea4517b2017-12-04 16:45:04 +010089LOCAL_CERTIFICATE := PRESIGNED
Pierre-Hugues Husson3811d162017-12-04 23:07:00 +010090LOCAL_OVERRIDES_PACKAGES := $3
Pierre-Hugues Husson16644af2020-04-05 16:08:40 +020091$addition
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +010092include \$(BUILD_PREBUILT)
Pierre-Hugues Husson5250fdd2017-12-04 22:18:22 +010093
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +010094EOF
95echo -e "\t$2 \\" >> apps.mk
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +010096}
97
Jon West9fd0d662021-04-01 16:07:30 -040098echo -e "${LT_BLUE}# Setting Up${NC}"
Pierre-Hugues Husson16644af2020-04-05 16:08:40 +020099rm -Rf apps.mk lib
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +0100100cat > Android.mk <<EOF
101LOCAL_PATH := \$(my-dir)
102
103EOF
104echo -e 'PRODUCT_PACKAGES += \\' > apps.mk
105
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100106mkdir -p bin
Pierre-Hugues Hussone1b56f52020-11-03 18:15:49 +0100107
Pierre-Hugues Husson5250fdd2017-12-04 22:18:22 +0100108#downloadFromFdroid packageName overrides
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100109downloadFromFdroid() {
110 mkdir -p tmp
Pierre-Hugues Hussone1b56f52020-11-03 18:15:49 +0100111 [ "$oldRepo" != "$repo" ] && rm -f tmp/index.xml
112 oldRepo="$repo"
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100113 if [ ! -f tmp/index.xml ];then
114 #TODO: Check security keys
Jon West0d65aa82021-04-04 19:55:11 -0400115 failed_count=0
116 array=( $repo $repo2 $repo3 $repo4 $repo5 $repo6 $repo7 $repo8 $repo9 $repo10 $repo11 $repo12 $repo13 )
117 for url in $repo $repo2 $repo3 $repo4 $repo5 $repo6 $repo7 $repo8 $repo9 $repo10 $repo11 $repo12 $repo13 ; do
118 echo -e "${GREEN}# Trying: $url ${NC}"
119 if wget --connect-timeout=10 --tries=2 ${url}index.jar -O tmp/index.jar; then
120 unzip -p tmp/index.jar index.xml > tmp/index.xml
121 echo -e "${GREEN}# Downloaded from $url ${NC}"
122 failed=
123 repo=${url}
124 passed=true
125 break
126 elif [ "$failed" ]; then
127 echo -e "${YELLOW}# $url broken ${NC}"
128 failed=true
129 failed_count=$((failed_count+1))
130 else
131 echo -e "${YELLOW}# $url failed ${NC}"
132 failed=true
133 failed_count=$((failed_count+1))
134 fi
135
136 done
137 echo -e "${Yellow}# Total mirrors: ${#array[@]} ${NC}"
138 echo -e "${RED}# Failed $failed_count mirrors ${NC}"
139 if [ "$failed_count" == "${#array[@]}" ]; then
140 echo -e "${RED}# Failed too many mirrors: $failed_count ${NC}"
141 exit
142
143 fi
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100144 fi
Jon West1c44e902021-04-01 19:29:47 -0400145
146 index=1
147 apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./apkname tmp/index.xml)"
148 native="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./nativecode tmp/index.xml)"
149 if [ "$native" != "" ]
150 then
151 index=1
152 while true
153 do
154 apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./apkname tmp/index.xml)"
155 native="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./nativecode tmp/index.xml)"
156 if [ "$native" != "" ] && [ "$(echo $native | grep $MAIN_ARCH)" != "" ]
157 then
158 native=$MAIN_ARCH
159 echo -e "${YELLOW}# native is $native ${NC}"
160 break
161 fi
162 if [ "$native" == "" ]
163 then
164 echo -e "${YELLOW}# native is blank or $native ${NC}"
165 break
166 fi
167 index=$((index + 1))
168 done
169 if [ "$native" != "$MAIN_ARCH" ]
170 then
171 index=1
172 while true
173 do
174 apk="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./apkname tmp/index.xml)"
175 native="$(xmlstarlet sel -t -m '//application[id="'"$1"'"]/package['$index']' -v ./nativecode tmp/index.xml)"
176 if [ "$native" != "" ] && [ "$(echo $native | grep $SUB_ARCH)" != "" ]
177 then
178 native=$SUB_ARCH
179 echo -e "${YELLOW}# native is $native ${NC}"
180 break
181 fi
182 index=$((index + 1))
183 done
184 if [ "$native" != "$SUB_ARCH" ]
185 then
186 echo -e "${RED} $1 is not available in $MAIN_ARCH nor $SUB_ARCH ${NC}"
187 exit 1
188 fi
189 fi
190 fi
paledega6303e2a2020-03-02 09:39:50 +0300191 if [ ! -f bin/$apk ];then
192 while ! wget --connect-timeout=10 $repo/$apk -O bin/$apk;do sleep 1;done
Jon Wested6857b2021-04-01 16:37:30 -0400193 else
194 echo -e "${GREEN}# Already grabbed $apk ${NC}"
paledega6303e2a2020-03-02 09:39:50 +0300195 fi
Pierre-Hugues Husson5250fdd2017-12-04 22:18:22 +0100196 addCopy $apk $1 "$2"
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100197}
Jon West1c44e902021-04-01 19:29:47 -0400198
Jon West0d65aa82021-04-04 19:55:11 -0400199downloadStuff() {
200 what="$1"
201 where="$2"
202
203 while ! wget --connect-timeout=10 --tries=2 "$what" -O "$where";do sleep 1;done
204}
205
206#downloadFromRepo repo repo_dir packageName overrides
207downloadFromRepo() {
208 repo="$1"
209 repo_dir="$2"
210 package="$3"
211 overrides="$4"
212
213 mkdir -p "$repo_dir"
214 if [ ! -f "$repo_dir"/index.xml ];then
215 downloadStuff "$repo"/index.jar "$repo_dir"/index.jar
216 unzip -p "$repo_dir"/index.jar index.xml > "$repo_dir"/index.xml
217 fi
218
219 marketvercode="$(xmlstarlet sel -t -m '//application[id="'"$package"'"]' -v ./marketvercode "$repo_dir"/index.xml || true)"
220 apk="$(xmlstarlet sel -t -m '//application[id="'"$package"'"]/package[versioncode="'"$marketvercode"'"]' -v ./apkname "$repo_dir"/index.xml || xmlstarlet sel -t -m '//application[id="'"$package"'"]/package[1]' -v ./apkname "$repo_dir"/index.xml)"
221 downloadStuff "$repo"/"$apk" bin/"$apk"
222
223 addCopy "$apk" "$package" "$overrides"
224}
225
226
Jon West9fd0d662021-04-01 16:07:30 -0400227echo -e "${YELLOW}# grabbing F-Droid Apps${NC}"
Jon West311f0ca2021-04-01 15:42:33 -0400228# Terminal Emulator
229downloadFromFdroid com.termoneplus
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100230#Navigation
231downloadFromFdroid net.osmand.plus
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100232#Calendar
Jon Wested6857b2021-04-01 16:37:30 -0400233downloadFromFdroid ws.xsoh.etar "Calendar"
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100234#Pdf viewer
Pierre-Hugues Husson02f4dcb2018-06-04 21:19:03 +0200235downloadFromFdroid com.artifex.mupdf.viewer.app
Unknown2974a752020-11-07 20:18:09 -0500236# Aurora App Store
Pierre-Hugues Husson06683c22020-03-31 23:16:24 +0200237downloadFromFdroid com.aurora.store
Pierre-Hugues Hussonb7a5f4a2017-12-04 17:07:27 +0100238#Mail client
Pierre-Hugues Husson5250fdd2017-12-04 22:18:22 +0100239downloadFromFdroid com.fsck.k9 "Email"
Pierre-Hugues Hussone46e3702018-06-04 21:19:57 +0200240#Calendar/Contacts sync
Pierre-Hugues Husson06683c22020-03-31 23:16:24 +0200241downloadFromFdroid com.etesync.syncadapter
Pierre-Hugues Husson06683c22020-03-31 23:16:24 +0200242# Todo lists
243downloadFromFdroid org.tasks
Unknown2974a752020-11-07 20:18:09 -0500244#Fake assistant that research on duckduckgo
245downloadFromFdroid co.pxhouse.sas
246# Gallery App
247downloadFromFdroid com.simplemobiletools.gallery.pro "Photos Gallery Gallery2"
248# Aurora Fdroid
249downloadFromFdroid com.aurora.adroid
Jon Wested6857b2021-04-01 16:37:30 -0400250# F-Droid App Store
251#~ downloadFromFdroid org.fdroid.fdroid
Jon West1c44e902021-04-01 19:29:47 -0400252#fdroid extension
253#~ downloadFromFdroid org.fdroid.fdroid.privileged
q0kHaN77f09432019-11-11 12:36:35 +0000254#Phonograph
255downloadFromFdroid com.kabouzeid.gramophone "Eleven"
kisekinopureya6a3d0362020-01-19 21:35:08 +0300256#Alarmio
257downloadFromFdroid me.jfenn.alarmio "GoogleClock DeskClock"
kisekinopureya13634d72019-12-12 01:23:53 +0300258#Mozilla Nlp
kisekinopureyae47d0882020-01-19 21:44:48 +0300259downloadFromFdroid org.microg.nlp.backend.ichnaea
kisekinopureyabb4217d2019-12-10 20:47:31 +0300260#Nominatim Nlp
261downloadFromFdroid org.microg.nlp.backend.nominatim
Jon Westbc3240a2021-04-01 15:30:41 -0400262# Midori Browser
Jon Wested6857b2021-04-01 16:37:30 -0400263downloadFromFdroid org.midorinext.android "Browser2 QuickSearchBox"
Jon Westddb6a382021-04-01 15:43:49 -0400264# EtchDroid USB Writer
265downloadFromFdroid eu.depau.etchdroid
Jon Westdd1770f2021-04-04 19:54:58 -0400266# NewPipe
267downloadFromFdroid org.schabi.newpipe
Pierre-Hugues Hussonb7a5f4a2017-12-04 17:07:27 +0100268
kisekinopureyabb4217d2019-12-10 20:47:31 +0300269#Web browser
Unknown2974a752020-11-07 20:18:09 -0500270#~ downloadFromFdroid org.mozilla.fennec_fdroid "Browser2 QuickSearchBox"
271#Public transportation
272#~ downloadFromFdroid de.grobox.liberario
273#Ciphered Instant Messaging
274#downloadFromFdroid im.vector.alpha
275#Nextcloud client
276#~ downloadFromFdroid com.nextcloud.client
277# Social Media Apps
Unknowna0b877c2020-11-07 19:48:33 -0500278#~ downloadFromFdroid org.mariotaku.twidere
279#~ downloadFromFdroid com.pitchedapps.frost
280#~ downloadFromFdroid com.keylesspalace.tusky
paledega6303e2a2020-03-02 09:39:50 +0300281
Jon West9fd0d662021-04-01 16:07:30 -0400282echo -e "${YELLOW}# grabbing MicroG Apps${NC}"
Jon West0d65aa82021-04-04 19:55:11 -0400283downloadFromRepo "$microg" "$microg_dir" com.google.android.gms
284downloadFromRepo "$microg" "$microg_dir" com.google.android.gsf
285downloadFromRepo "$microg" "$microg_dir" com.android.vending "Google Play Store"
286downloadFromRepo "$microg" "$microg_dir" org.microg.gms.droidguard
Pierre-Hugues Hussone1b56f52020-11-03 18:15:49 +0100287
Jon West9fd0d662021-04-01 16:07:30 -0400288echo -e "${YELLOW}# grabbing NanoLX Apps${NC}"
Jon West0d65aa82021-04-04 19:55:11 -0400289downloadFromRepo "$nanolx" "$nanolx_dir" is.xyz.mpv
Unknown2974a752020-11-07 20:18:09 -0500290
Jon West9fd0d662021-04-01 16:07:30 -0400291echo -e "${LT_BLUE}# finishing up apps.mk${NC}"
Pierre-Hugues Hussonc1f73e82017-12-04 16:43:14 +0100292echo >> apps.mk
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100293
Jon West9fd0d662021-04-01 16:07:30 -0400294echo -e "${YELLOW}# Cleaning up${NC}"
Pierre-Hugues Hussonbcc5b642017-12-04 16:27:25 +0100295rm -Rf tmp
Jon West9fd0d662021-04-01 16:07:30 -0400296
297echo -e "${GREEN}# DONE${NC}"