از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
یک برنامه سازگار با AVF دارای دو بخش است: بخشی از برنامه که روی سیستم عامل اندروید میزبان اجرا می شود و بخشی از برنامه که روی Microdroid در یک pVM اجرا می شود.
بخشی از برنامه در حال اجرا در اندروید، رابط کاربری، منطق تجاری غیر محرمانه را پیاده سازی می کند و چرخه حیات یک pVM را ایجاد و مدیریت می کند.
بخشی از برنامه در حال اجرا در Microdroid، در داخل یک pVM، مسئول انجام هر کاری است که باید به صورت ایمن انجام شود.
برای راهاندازی و برقراری ارتباط با بخش pVM برنامه، برنامه میزبان شما یک pVM ایجاد میکند و یک کتابخانه مشترک بومی در pVM اجرا میکند. این کتابخانه یک سرویس binder را پیاده سازی می کند که بخش میزبان برنامه از آن برای برقراری ارتباط با بخشی از برنامه در یک pVM استفاده می کند. شکل 1 دو بخش برنامه و کانال ارتباطی بایندر را نشان می دهد:
شکل 1. بارگذاری و ارتباط برنامه AVF
فایل پیکربندی را تنظیم کنید
فایل vm_config.json شما باید ورودی برای سیستم عامل pVM و کتابخانه مشترک داشته باشد. فایل assets/vm_config.json زیر ورودیهای فایل پیکربندی را برای Microdroid و یک کتابخانه بومی مشترک نشان میدهد:
در کتابخانه مشترک خود، یک سرویس کلاسور اجرا کنید. به عنوان مثال:
extern "C"
int android_native_main(int, char**) {
// Implement your binder service here
}
کد برنامه ایجاد کنید
در بخش میزبان برنامه خود، کدی ایجاد کنید که فایل پیکربندی را آماده میکند، یک دسته را در VM بارگیری میکند (یا ایجاد میکند) و VM را اجرا میکند. به عنوان مثال:
// 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();
با بخش VM برنامه خود ارتباط برقرار کنید
برای برقراری ارتباط با بخش VM برنامه خود، ابتدا یک تماس برگشتی ثبت می کنید تا زمانی که سرویس binder در VM آماده شد، مطلع شوید. هنگامی که به شما اطلاع داده می شود، به سرور بایندر متصل می شوید و سپس با استفاده از رابط سفارشی AIDL با سرور صحبت می کنید. به عنوان مثال:
برای دانلود کد منبع یک برنامه آزمایشی که مراحل این سند را نشان میدهد، به MicrodroidDemo مراجعه کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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."]]