[Compilation du code source] android-13.0.0_r7 pour Pixel 4 sur ubuntu20.04-server
[Compilation du code source] android-12.1.0_r11 pour Pixel 4 sur ubuntu20.04-server
[Compilation du code source] android-11.0.0_r46 pour Pixel 4 sur ubuntu20 .04-server
[compilation du code source] android 10.0.0_r2 pour Pixel 2 XL sur ubuntu20.04-server
[compilation du code source] android-9.0.0_r46 pour Pixel 2 XL sur ubuntu20.04-server
[compilation du code source ] android-8.0.0_r21 pour Pixel 2 XL sur ubuntu20.04-server
index de contenu
- avant-propos
- Environnement de configuration
- choisir la branche
- télécharger le code source
- Importer le pilote de périphérique (facultatif, nécessaire pour flasher dans un périphérique réel)
- Configurer jdk
- construire le code source
- Flash dans le miroir
- Brossez dans l'image (compilation de serveur distant, fenêtre locale) (Sur Xshell 5)
- Compiler le noyau Pixel 2 XL
- sur mesure
-
- Modifier system.img
- audit2allow correctifs d'exécution
- autorité racine
- Activer le débogage USB par défaut (persist.sys.usb.config est toujours aucun pour empêcher la détection de connexion USB)
- créer une clé de libération
- Modifier les propriétés de l'appareil
- Déverrouillage BL caché
- Trace d'accès aux propriétés système
- Activer l'application débogable (ro.debuggable est toujours 0)
- Modifier le temps de veille par défaut de l'écran (unité : ms)
- Le verrouillage de l'écran est par défaut sur "aucun"
- Modifier la langue par défaut en chinois
- trace de trace
- getenforce obligé de revenir
- Plus d'échanges de technologies inversées
- référence
avant-propos
Merci à Kanxue, Jianshu, CSDN et d'autres tutoriels de compilation senior sur diverses plates-formes, merci à Google d'avoir rendu la compilation Android de plus en plus facile. Dans le passé, il y avait essentiellement divers problèmes de compilation, mais maintenant c'est direct jusqu'à la fin en une seule étape , ultra lisse
Environnement de configuration
- ubuntu20.04-server (le miroir Tsinghua a été changé)
- 4 cœurs
- 8 Go de RAM
- Disque 2T
- hôte physique
- Proxy nécessaire, assez rapide, recommandé au dessus de 20Mb/s
- Un téléphone Pixel 2 XL
- configurer les chaînes proxy
choisir la branche
Ici, je choisis android-10.0.0_r2, car j'ai vu cette branche utilisée dans plusieurs tutoriels inverses, donc je choisis cette branche pour faciliter l'analyse inverse. Quant à la raison spécifique, je suppose que cette branche prend en charge plus de modèles, et les modèles pris en charge Liste : Pixel 3a XL, Pixel 3a, Pixel 3 XL, Pixel 3, Pixel 2 XL, Pixel 2, Pixel XL, Pixel, tous pris en charge de Pixel à Pixel3, et j'utilise Pixel 2 XL
Remarque : la branche doit correspondre au modèle de l'appareil, toutes les branches ne peuvent pas être flashées pour un modèle, voir la liste de correspondance spécifique : Ici
télécharger le code source
sudo apt-get update
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5-dev lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python
mkdir ~/bin
export PATH=~/bin:$PATH
proxychains curl https://storage.googleapis.com/git-repo-downloads/repo -o ~/bin/repo
chmod a+x ~/bin/repo
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
git config --global user.name Your Name
git config --global user.email [email protected]
# -b 后面代号选择,访问:https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds
proxychains repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r2
# -j 的数字根据机器性能而定
proxychains repo sync -c -j8
Importer le pilote de périphérique (facultatif, nécessaire pour flasher dans un périphérique réel)
- Téléchargez le fichier de pilote correspondant pour Pixel 2 XL, adresse : taimenqp1a.190711.020
- Placez les deux packages compressés dans le répertoire racine du code source
- Exécutez la commande de décompression
tar -zxvf xxxxx.tgz
- Exécutez le fichier sh décompressé, généralement à
8.e.
la fin de la ligne, et à la fin laissera l'entréeI ACCEPT
, n'appuyez pas trop vite sur Entrée, sinon il sera ignoré directement - Après exécution, vous pouvez trouver le répertoire du vecteur dans le répertoire racine du code source
Configurer jdk
Avant android-8.1.0_r1, vous devez installer jdk vous-même, puis il est livré avec le code source, chemin : prebuilts/jdk, vous n'avez donc pas besoin de configurer jdk après android-8.0.0_r1
construire le code source
cd WORKING_DIRECTORY
sudo apt-get install libncurses5
export _JAVA_OPTIONS="-Xmx4g"
source build/envsetup.sh
lunch aosp_taimen-user
m
Ici, m est exécuté dans une boucle, et si une erreur est signalée, il continuera à s'exécuter. S'il y a une invite de réparation, suivez l'invite, sinon la valeur par défaut sera toujours m, tant que l'erreur n'est pas la même à chaque fois
Flash dans le miroir
cd WORKING_DIRECTORY/out/target/product/taimen/
fastboot flashall -w
Brossez dans l'image (compilation de serveur distant, fenêtre locale) (Sur Xshell 5)
- sous xshell
cd WORKING_DIRECTORY/out/target/product/taimen/
sz *.txt
sz *.img
- Sous la fenêtre
, basculez dans le répertoire téléchargé par la commande sz, ouvrez cmd dans ce répertoire, et exécutez la commande suivante
set ANDROID_PRODUCT_OUT=./
fastboot flashall -w
Compiler le noyau Pixel 2 XL
Le code source du noyau n'est pas dans aosp, il doit être téléchargé séparément, environ 4,35 Go,
le noyau de chaque modèle est différent, pour plus de détails, veuillez vous référer à : https://source.android.google.cn/setup/build /building-kernels?hl=zh-cn
télécharger le code source
mkdir android-msm-wahoo-4.4-android10-qpr3
cd android-msm-wahoo-4.4-android10-qpr3
proxychains repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-wahoo-4.4-android10-qpr3
proxychains repo sync -c -j8
Passer au commitId spécifié
Ce commitId peut être obtenu en vérifiant la version du noyau du téléphone mobile, généralement sous la forme -g{commitId}
- Afficher les détails du commit, full_commitId est inclus dans les détails
repo forall -c 'git show $commitId'
- passer à ce commit
repo forall -c 'git reset --hard $full_commitId'
Compiler le code source
# openssl/bio.h file not found
sudo apt-get install libssl-dev
# soong_zip: cammand not found
export PATH=/mnt/d/tool/android/android-10.0.0_r2/out/soong/host/linux-x86/bin:$PATH
build/build.sh
remplacer le noyau aosp
Remplacez le noyau compilé ci-dessus dans aosp, qui est spécifié par la variable d'environnement TARGET_PREBUILT_KERNEL pour faciliter la commutation dynamique des noyaux. Pour plus de détails, voir : https://source.android.google.cn/setup/build/building-kernels?hl= zh-cn# en cours d'exécution
cd android-10.0.0_r2
# 先初始化aosp编译环境,具体看上面构建aosp源码步骤
export TARGET_PREBUILT_KERNEL=/mnt/d/tool/android/kernel/android-msm-wahoo-4.4-android10-qpr3/out/android-msm-wahoo-4.4/dist/Image.lz4-dtb
m bootimage
Après cela, suivez les étapes ci-dessus <Flash into image> pour flasher normalement
sur mesure
- modifier le code
m <target module>
make snod
(compiler system.img, ignorer les dépendances)m
- vérification du journal système lors de la personnalisation
dmesg | grep <tag>
oucat /proc/kmsg | grep <tag>
Le <module cible> fait ici référence au nom du module dans le fichier bp. Si le fichier exécutable est un module avec la structure cc_binary{} dans le bp, son attribut name est le nom du module. Si c'est une bibliothèque, cherchez celle qui commence par cc_library, si c'est une application, cherchez celle qui commence par android_app...etc
Modifier system.img
Étant donné que le module doit être occupé lorsque le système est en cours d'exécution, il ne peut pas être écrasé à ce stade. Bien sûr, vous pouvez également écraser directement l'intégralité du fichier system.img, mais le micrologiciel officiel de Google est définitivement différent du micrologiciel que nous avons compilé. Vous peut voir la différence. Il se peut que certaines choses privées aient été ajoutées au code source du système d'origine. Bien sûr, vous pouvez également essayer d'écraser des fichiers en mode de récupération, mais après avoir réellement testé twrp en mode de récupération, de nombreux problèmes se produiront. Le cryptage de la partition de données nécessite un changement de format, le système ne peut pas être monté et ainsi de suite.
Au final, la seule solution envisageable est de modifier le fichier system.img.
audit2allow correctifs d'exécution
sudo apt-get install python2
rm -rf /usr/bin/python
sudo ln -s /usr/bin/python2 /usr/bin/python
autorité racine
// voir référence
Activer le débogage USB par défaut (persist.sys.usb.config est toujours aucun pour empêcher la détection de connexion USB)
- Activer le débogage USB
//android-10.0.0_r2/frameworks/base/services/core/java/com/android/server/adb/AdbService.java#119
// mAdbEnabled = containsFunction(
// SystemProperties.get(USB_PERSISTENT_CONFIG_PROPERTY, ""),
// UsbManager.USB_FUNCTION_ADB);
mAdbEnabled = true;
- Gérer automatiquement la vérification USB
//android-10.0.0_r2/frameworks/base/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java#onCreate()
@Override
public void onCreate(Bundle icicle) {
//......
setupAlert();
//....
mAlert.getButton(BUTTON_POSITIVE).setOnTouchListener(filterTouchListener);
//add code
try {
IBinder b = ServiceManager.getService(ADB_SERVICE);
IAdbManager service = IAdbManager.Stub.asInterface(b);
service.allowDebugging(true, mKey);
} catch (Exception e) {
Log.e(TAG, "Unable to notify Usb service", e);
}
finish();
}
créer une clé de libération
- Créez create_key.sh dans le répertoire racine du code source
#create_key.sh
subject='/C=CN/ST=Shanghai/L=Shanghai/O=marto/OU=marto/CN=marto.cc/[email protected]'
for x in releasekey platform shared media networkstack;
do
./development/tools/make_key ~/.android-certs/$x "$subject";
done
- Exécution du répertoire racine du code source
cp -r ~/.android-certs/releasekey.* build/target/product/security/
testkey
->releasekey
# build/core/config.mk
# The default key if not set as LOCAL_CERTIFICATE
ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/releasekey
endif
.KATI_READONLY := DEFAULT_SYSTEM_DEV_CERTIFICATE
# build/core/Makefile
# The "test-keys" tag marks builds signed with the old test keys,
# which are available in the SDK. "dev-keys" marks builds signed with
# non-default dev keys (usually private keys from a vendor directory).
# Both of these tags will be removed and replaced with "release-keys"
# when the target-files is signed in a post-build step.
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)
BUILD_KEYS := release-keys
else
BUILD_KEYS := dev-keys
endif
m -j4
recompiler
Modifier les propriétés de l'appareil
Déverrouillage BL caché
Trace d'accès aux propriétés système
//bionic/libc/bionic/system_property_api.cpp
#include <async_safe/log.h>
__BIONIC_WEAK_FOR_NATIVE_BRIDGE
const prop_info* __system_property_find(const char* name) {
char value[PROP_VALUE_MAX] = {
0};
system_properties.Get(name, value);
async_safe_format_log(ANDROID_LOG_ERROR,
"marto","call __system_property_find %s -> %s",name,value);
return system_properties.Find(name);
}
__BIONIC_WEAK_FOR_NATIVE_BRIDGE
int __system_property_read(const prop_info* pi, char* name, char* value) {
int ret= system_properties.Read(pi, name, value);
async_safe_format_log(ANDROID_LOG_ERROR,
"marto","call __system_property_read %s -> %s",name,value);
return ret;
}
__BIONIC_WEAK_FOR_NATIVE_BRIDGE
int __system_property_get(const char* name, char* value) {
int ret= system_properties.Get(name, value);
async_safe_format_log(ANDROID_LOG_ERROR,
"marto","call __system_property_get %s -> %s",name,value);
return ret;
}
Activer l'application débogable (ro.debuggable est toujours 0)
//frameworks/base/core/java/android/content/pm/PackageParser.java#parseBaseApplication()
// if (sa.getBoolean(
// com.android.internal.R.styleable.AndroidManifestApplication_debuggable,
// false)) {
ai.flags |= ApplicationInfo.FLAG_DEBUGGABLE;
// Debuggable implies profileable
ai.privateFlags |= ApplicationInfo.PRIVATE_FLAG_PROFILEABLE_BY_SHELL;
// }
Modifier le temps de veille par défaut de l'écran (unité : ms)
<!-- frameworks/base/packages/SettingsProvider/res/values/defaults.xml -->
<integer name="def_screen_off_timeout">36000000</integer>
Le verrouillage de l'écran est par défaut sur "aucun"
<!-- frameworks/base/packages/SettingsProvider/res/values/defaults.xml -->
<bool name="def_lockscreen_disabled">true</bool>
Modifier la langue par défaut en chinois
# build/tools/buildinfo.sh
# ..........
echo "# end build properties"
echo "# custom build properties"
echo "# default language"
echo "ro.product.locale=zh_CN"
echo "ro.product.locale.language=zh"
echo "ro.product.locale.region=CN"
echo "persist.sys.language=zh"
echo "persist.sys.country=CN"
echo "persist.sys.timezone=Asia/Shanghai"
echo "# end custom build properties"
trace de trace
//bionic/libc/bionic/ptrace.cpp
#include <async_safe/log.h>
long ptrace(int req, ...) {
//......
va_end(args);
async_safe_format_log(ANDROID_LOG_ERROR,
"marto","call ptrace pid:%d,addr:0x%p",pid,addr);
long result = __ptrace(req, pid, addr, data);
if (is_peek && result == 0) {
return peek_result;
}
return result;
}
getenforce obligé de revenir
Plus d'échanges de technologies inversées
Rejoignez la planète « Reverse Hunting »
référence
- https://source.android.com/setup/develop
- Télécharger et compiler le code source Android (Google)
- Personnalisation du code source Android10 (1) Créer une version racine complète
- Génération et remplacement de la signature du système AOSP
- https://source.android.com/devices/tech/ota/sign_builds
- https://source.android.com/devices/bootloader/locking_unlocking?hl=zh-cn
- Android 7.1 modifie le temps de sommeil par défaut
- aosp changer la langue par défaut, problème de fuseau horaire
- Fichier de stratégie SELinux
- Construire le noyau Pixel2
- Imprimer les informations du journal de débogage du noyau Android en temps réel via le port série
- Comment adb imprime-t-il le journal de sortie du noyau
- Chapitre 3 Impression du noyau des méthodes de débogage du noyau
- http://www.juneleo.cn/47a3736f9762/
- [run_soong_ui] Erreur 1
- Compilation du code source (1) - Explication détaillée de la compilation du code source Android6.0