تحميل وبناء AOSP

قررت مشاركة تعليماتي حول كيفية إنشاء AOSP (مشروع Android مفتوح المصدر). ستكون هذه التعليمات مفيدة لأولئك الذين يرغبون في رؤية شيء ما داخل Android وربما يقومون بتطوير النظام. على أي حال ، هذه المعرفة مفيدة لفهم Android نفسه ، ولهذا قررت فقط إنشاء AOSP.



لقد قمت ببناء المشروع على الابتدائية 5.1 OS Ubuntu 18.04 LTS (بيونيك) ، حاولت بناءه على نظام MacOS ، لكنني فشلت. بالنسبة للمصادر والتجميع ، تحتاج إلى 200 جيجابايت من مساحة القرص الصلب (أفضل من SSD ، في الأداء العادي يتراجع كثيرًا). قضيت أيضًا الكثير من الوقت للتنزيل والتجميع حوالي 20 ساعة ، ويرجع ذلك جزئيًا إلى التهيئة "الضعيفة" لجهاز الكمبيوتر الخاص بي. لدي فقط 8 غيغابايت من ذاكرة الوصول العشوائي مثبتة ، لكنني قمت بزيادة حجم المبادلة إلى 16 غيغابايت.



تحميل AOSP



قم بتثبيت الحزم المطلوبة للتنزيل والإنشاء:



sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig


قم بإنشاء مجلد وقم بتنزيل الأداة المساعدة repo لتنزيل التعليمات البرمجية المصدر



mkdir aosp #     
cd aosp

curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo


تتكون مصادر AOSP من مشاريع منفصلة مع مستودعات git الخاصة بها ، ويسمح لك الريبو بتبسيط التنزيل الكامل لجميع المشاريع ووضعها في المجلدات الضرورية.



جاري تهيئة الريبو



./repo init -b android-10.0.0_r45 --depth 1 -u https://android.googlesource.com/platform/manifest


المعلمات:



  • -u - عنوان url الخاص بمستودع git مع بيان
  • -b - الفرع (الأحدث حاليًا)
  • —depth — ( , , )


Android 10. develop master, .



AOSP



./repo sync -c  -j $(nproc) --no-tags --no-clone-bundle


:



  • -c — ( — android-10.0.0_r45)
  • -j — ,
  • —no-tags —
  • —no-clone-bundle — clone.bundle ( , , bundle),


—no-clone-bundle , , 404

, repo , : https://source.android.com/setup/develop/repo





:



source build/envsetup.sh




lunch aosp_x86_64-eng


x86_64 — , Generic x86_64 , Nexus , https://source.android.com/setup/build/building#choose-a-target



eng — ( engineering), .



java Heap size, , StackOverflow :



export _JAVA_OPTIONS="-Xmx4g"


.bashrc

, :



USE_CCACHE=1 CCACHE_DIR=ccache make -j $(nproc)


CCACHE, , . "" - 16 .



, :



emulator -show-kernel


-show-kernel —



Enter,



,

محاكي



IDE



IDE, IDEA. :



mmm development/tools/idegen


AOSP ,



development/tools/idegen/idegen.sh


IDEA "". . IDEA , Android



development/tools/idegen/intellij-gen.sh frameworks/base




cat .repo/project.list


base.iml ( frameworks/base) IDEA. Java, java , AOSP- .



إعداد Java في المشروع





monitor



 ~/Android/Sdk/tools/lib/monitor-x86_64/monitor


jre

sudo apt install openjdk-8-jre-headless

, . monitor- /8700, , IDEA.

system_process. .



monitor AOSP

مراقب من Android



في المشروع ، أضف تكوينًا جديدًا عن بُعد ، حدد فقط المنفذ 8700. سنقوم بالاتصال بهذا المنفذ



أضف التكوين عن بعد إلى IDEA



تشغيل التصحيح (تشغيل → تصحيح)



للتأكد من أن كل شيء متصل ، ضع نقطة توقف في ملف framework / base / services / core / java / com / android / server / wm / ActivityTaskManagerService.java إلى الطريقة:



// line 1040
int startActivityAsUser(IApplicationThread caller, String callingPackage,
            Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode,
            int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId,
            boolean validateIncomingUser) {
//...
}


وقم بتشغيل أي تطبيق على المحاكي (مثل الإعدادات).



كل شيء جاهز الآن للتجربة.




All Articles