Android: come modificare AndroidManifest.xml
Qualche volta per modificare un apk di sistema dobbiamo editare il suo AndroidManifest.xml ma non possiamo semplicemente modificarlo altrimenti corromperemo la firma e l'apk non sarà avviato all'avvio del sistema.
Potremmo disabilitare la verifica della firma nel services.jar oppure rifirmare ogni apk nella rom ma queste non sono le soluzioni più eleganti.
Dopo aver editato l'AndroidManifest.xml in un apk di sistema possiamo controllare la firma dell'apk modificato in .apk/META-INF/CERT.RSA e poi rifirmare ogni apk di sistema che ha lo stesso numero di serie nella firma.
Con questo comando avremo ogni informazione sul certificato:
keytool -printcert -v -file .apk/META-INF/CERT.RSA
e con questo comando avremo il Numero di serie:
keytool -printcert -v -file CERT.RSA|grep "Numero di serie"| cut -c 18-23
Possiamo rifirmare l'apk con signapk usando il proprio certificato, il certificato test o il certificato AOSP. Qui i certificati.
Questo è il comando per firmare l'apk con il certificato test:
java -Xmx512M -jar signapk.jar testkey.x509.pem testkey.pk8 .apk .apk.signed
e questo è il comando per firmare l'apk con il certificato AOSP:
java -Xmx512M -jar signapk.jar platform.x509.pem platform.pk8 .apk .apk.signed
Per automatizzare l'intero processo possiamo usare questi scripts:
#!/bin/bash
cd app
for filename in *.apk
do
unzip -d $filename.extract $filename META-INF/CERT.RSA
if [ -f $filename.extract/META-INF/CERT.RSA ]
then
mkdir `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep "Numero di serie"| cut -c 18-23`
mv $filename `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep "Numero di serie"| cut -c 18-23`/$filename
mv `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|"Numero di serie"| cut -c 18-23`/`echo $filename | sed 's/\(.*\.\)apk/\1odex/'`
rm -rf $filename.extract
else
mkdir none
mv $filename none
mv `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` none
rm -rf $filename.extract
fi
done;
mkdir other
mv * other
mv other/1446 motorola
mv other/b399 platform
mv other/f2a7 shared
mv other/f2b9 media
mv other/936e test
#!/bin/bash
cd app
for filename in `find . -name '*.apk' -or -name '*.jar'`
do
echo $filename
java -Xmx512M -jar signapk.jar platform.x509.pem platform.pk8 $filename $filename.signed
rm $filename
mv $filename.signed $filename
done;