اعتبارًا من 27 آذار (مارس) 2025، ننصحك باستخدام android-latest-release بدلاً من aosp-main لإنشاء AOSP والمساهمة فيه. لمزيد من المعلومات، يُرجى الاطّلاع على التغييرات في AOSP.
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يتألّف التطبيق المتوافق مع AVF من جزأين: جزء من التطبيق يعمل على نظام التشغيل Android المضيف وجزء من التطبيق يعمل على Microdroid ضمن جهاز افتراضي شخصي.
ينفِّذ الجزء من التطبيق الذي يعمل على Android واجهة المستخدم،
ومنطق النشاط التجاري غير السري، وينشئ دورة حياة
وحدة افتراضية للبرامج (VM) ويديرها.
إنّ الجزء من التطبيق الذي يعمل على Microdroid ضمن جهاز افتراضي شخصي مسؤول عن
تنفيذ أي مهام يجب تنفيذها بأمان.
لتشغيل جزء "الآلة الافتراضية للتطبيقات" من تطبيقك والتواصل معه، ينشئ تطبيقك المضيف "آلة افتراضية للتطبيقات" ويعمل على تشغيل مكتبة برمجية أصلية مشترَكة داخل "آلة افتراضية للتطبيقات". تنفِّذ هذه المكتبة خدمة ربط يستخدمها الجزء المضيف
من التطبيق للتواصل مع الجزء من التطبيق ضمن جهاز افتراضي شخصي. يعرض الشكل
1 الجزءَين من التطبيق وقناة التواصل مع الموسّع:
الشكل 1: تحميل تطبيق AVF والتواصل معه
إعداد ملف الضبط
يجب أن يتضمّن ملف vm_config.json إدخالاً لنظام تشغيل جهاز افتراضي شخصي
والمكتبة المشتركة. يعرض ملف assets/vm_config.json التالي إدخالاتملف الإعدادات
لنظام التشغيل Microdroid ومكتبة برمجية أصلية مشترَكة:
extern "C"
int android_native_main(int, char**) {
// Implement your binder service here
}
إنشاء رمز التطبيق
في جزء المضيف من تطبيقك، أنشئ رمزًا برمجيًا يُعدّ ملف الإعدادات ويحمِّل (أو ينشئ) معرّفًا للجهاز الظاهري ويشغّله. مثلاً:
// Prepare the configuration fileVirtualMachineConfigconfig=newVirtualMachineConfig.Builder(getApplication(),"assets/vm_config.json").build();// Load (or create) the handle to a VMVirtualMachinevm=VirtualMachineManager.getInstance(getApplication()).getOrCreate("my_vm",config);// Run the VMvm.run();
التواصل مع جزء الجهاز الافتراضي من تطبيقك
للتواصل مع جزء الجهاز الظاهري من تطبيقك، عليك أولاً تسجيل طلب استدعاء
للحصول على إشعار عندما تكون خدمة الربط على الجهاز الظاهري جاهزة. عند تلقّي إشعار، يتم
الاتصال بخادم Binder ثم التواصل مع الخادم باستخدام واجهة
AIDL المخصّصة. مثلاً:
لتنزيل رمز المصدر لتطبيق تجريبي يوضّح الخطوات الواردة في
هذا المستند، يُرجى الرجوع إلى
MicrodroidDemo.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)
[[["يسهُل فهم المحتوى.","easyToUnderstand","thumb-up"],["ساعَدني المحتوى في حلّ مشكلتي.","solvedMyProblem","thumb-up"],["غير ذلك","otherUp","thumb-up"]],[["لا يحتوي على المعلومات التي أحتاج إليها.","missingTheInformationINeed","thumb-down"],["الخطوات معقدة للغاية / كثيرة جدًا.","tooComplicatedTooManySteps","thumb-down"],["المحتوى قديم.","outOfDate","thumb-down"],["ثمة مشكلة في الترجمة.","translationIssue","thumb-down"],["مشكلة في العيّنات / التعليمات البرمجية","samplesCodeIssue","thumb-down"],["غير ذلك","otherDown","thumb-down"]],["تاريخ التعديل الأخير: 2025-07-27 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Write an AVF app\n\nA AVF-compatible app has two parts: The portion of the app running on the host\nAndroid OS and the portion of the app running on Microdroid within a pVM.\n\nThe portion of the app running on Android implements the user interface,\nnon-confidential business logic, and creates and manages the lifecycle of a\npVM.\n\nThe portion of the app running on Microdroid, within a pVM, is responsible for\nperforming any tasks that need to be performed securely.\n\nTo launch and communicate with the pVM portion of your app, your host\napplication creates a pVM and runs a native shared library\nwithin the pVM. This library implements a binder service that the host portion\nof the app uses to communicate with the portion of the app within a pVM. Figure\n1 shows the two parts of the application and the binder communication channel:\n\n\n**Figure 1.** AVF app loading and communication\n\n\u003cbr /\u003e\n\nSet up the configuration file\n-----------------------------\n\nYour `vm_config.json` file should have an entry for the pVM's operating system\nand shared library. The following `assets/vm_config.json` file shows config file\nentries for Microdroid and a shared native library: \n\n {\n \"os\": {\n \"name\": \"microdroid\"\n },\n \"task\": {\n \"type\": \"microdroid_launcher\",\n \"command\": \"MicrodroidTestNativeLib.so\"\n }\n }\n\nImplement the binder service\n----------------------------\n\nWithin your shared library, implement a binder service. For example: \n\n extern \"C\"\n int android_native_main(int, char**) {\n // Implement your binder service here\n }\n\nCreate app code\n---------------\n\nIn the host portion of your app, create code that prepares the configuration\nfile, loads (or creates) a handle to the VM, and runs the VM. For example: \n\n // Prepare the configuration file\n VirtualMachineConfig config = new VirtualMachineConfig\n .Builder(getApplication(), \"assets/vm_config.json\")\n .build();\n\n // Load (or create) the handle to a VM\n VirtualMachine vm = VirtualMachineManager\n .getInstance(getApplication())\n .getOrCreate(\"my_vm\", config);\n\n // Run the VM\n vm.run();\n\nCommunicate with VM portion of your app\n---------------------------------------\n\nTo communicate with the VM portion of your app, you first register a callback\nto be notified when the binder service on the VM is ready. When notified, you\nconnect to the binder server and then talk with the server using the custom AIDL\ninterface. For example: \n\n // Register the callback\n vm.setCallback(Executors.newSingleThreadExecutor(),\n new VirtualmachineCallback() {\n @Override\n public void onPayloadReady(VirtualMachine vm) {\n // Connect to the binder server\n IBinder binder = vm.connectToVsockServer(PORT).get();\n IMyService svc = IMyService.Stub.asInterface(binder);\n // Talk with server using custom AIDL interface\n Result res = svc.doSomething();\n }\n }); //exception handling & proper threading omitted\n vm.run();\n\nTo download source code for a demo app that demonstrates the steps in this\ndocument, refer to\n[MicrodroidDemo](https://android.googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/android16-release/android/MicrodroidDemoApp/).\n| **Note:** This demo works only on Cuttlefish."]]