ذكري المظهر :نسخ APK برمجياً إلى /system/app
-
12-12-2019 - |
سؤال
أحاول تثبيت تطبيق نظام من كود Java الخاص بي، ولم أحقق أي نجاح حتى الآن.
وفيما يلي ما قمت به حتى الآن:
- جهازي متجذر.
- تم تثبيت تطبيق "المثبت" الخاص بي كتطبيق نظام.(نسخه يدويًا إلى /system/app)
- لقد قمت بالتوقيع على ملف APK المثبت باستخدام مفتاح النظام الأساسي، وقد قمت بذلك
android:sharedUserId="android.uid.system"
في البيان. لقد كنت أحاول (وأحاول، وبعد ذلك المزيد) من أجل
Runtime.getRuntime.exec("su")
.أنوي تركيب قسم النظام كـrw
, ، افعل أcat
لملف apk، ثم قم بإنشاء قسم النظامro
.فيما يلي قائمة الأوامر:mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br> cat /sdcard/application.apk > /system/app/application.apk<br> mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured.
- لقد طلبت ل
INSTALL_PACKAGES
إذن في البيان.
لقد قمت بتجربة عدد من الأشكال المختلفة للتنسيق exec("")، بما في ذلك استخدام 'su -c'
مع كل أمر.لقد حصلت على استثناء "الأنابيب المكسورة" واستثناء الأمان.في بعض الأحيان، لا أحصل على استثناء، ولكن لا يتم نسخ الملف.
من فضلك اسمحوا لي أن أعرف ما الذي أفتقده هنا.وقد حصلت على أي شخص على هذا العمل؟
شكرًا!
المحلول
وواصلت الحفر، وهذه هي النتائج:
- لدى Android هذا الاختيار su.c:["جذر مصدر android"/system/extras/su/su.c]
/* Until we have something better, only root and the shell can use su.*/ myuid = getuid(); if (myuid != AID_ROOT && myuid != AID_SHELL) { fprintf(stderr,"su: uid %d not allowed to su\n", myuid); return 1; }
يتغلب كل من ChainsDD (SuperUser) وcyanogen mod على هذا من خلال تطبيق su.c الخاص بهما: https://github.com/CyanogenMod/android_system_su/blob/master/su.c
ما هو خاص حول
/system/app
؟يبدو أن السبب هو أن القسم للقراءة فقط على الأجهزة التي لا تحتوي على جذر، مما يمنع تعديل/إلغاء تثبيت التطبيقات الموضوعة هناك. https://android.stackexchange.com/questions/17871/what-are-the-differences-between-a-system-app-and-user-appتطبيق موقّع باستخدام مفتاح النظام الأساسي ومع
sharedUserId = system
"جيد بما يكفي" لأغراضي، ولست مضطرًا على وجه التحديد إلى نسخه إلى /system/app.
أنا أقبل هذا كإجابة في الوقت الحالي.