Το Fabricated Overlay API του Android 12 επαναφέρει θέματα χωρίς root

Θυμάστε πώς το Android 8 διευκόλυνε το θέμα της συσκευής σας; Θυμάστε πόσο διασκεδαστικό ήταν αυτό; Λοιπόν, είναι πίσω στο Android 12, με μια ανατροπή.

Ο πλήρης στάβλος Android 12 η κυκλοφορία είναι προ των πυλών, και η Google έχει ακόμη δημοσίευσε τον πηγαίο κώδικα στο αποθετήριο AOSP του. Υπάρχει μια πολλά που είναι νέα στο Android 12, συμπεριλαμβανομένης μιας προσθήκης σε επικαλύψεις πόρων που ονομάζονται Κατασκευασμένες επικαλύψεις. Τι σήμαινε ως API για να βοηθήσει το σύστημα να διαχειριστεί τις δυναμικές αλλαγές που χρησιμοποιούνται Υλικό Εσείς και το monet μπορεί να μετατραπεί σε κάτι πολύ μεγαλύτερο -- τουλάχιστον μέχρι να κυκλοφορήσει το Android 13.

Ιστορικό

Ο Mishaal Rahman ανακάλυψε αυτό το νέο API και το έφερε στην προσοχή μου. Χρησιμοποιούσε την εντολή shell για να δοκιμάσει διαφορετικές τιμές πόρων στο Android 12 χωρίς να το έχει να μεταγλωττίσει χειροκίνητα APK επικάλυψης και σκέφτηκε ότι θα μπορούσε να δημιουργήσει μια ενδιαφέρουσα ιδέα εφαρμογής για συσκευές με root. Όταν μου το έφερε υπόψη μου, πήρα πολλά στον πηγαίο κώδικα για το Android 12 και παρατήρησα κάτι που νόμιζα ότι ήταν αρκετά ενδιαφέρον. Δοκίμασα αυτό που βρήκα και τώρα είμαστε εδώ -- όπως αποδεικνύεται, το Fabricated Overlay API μπορεί να χρησιμοποιηθεί για την επαναφορά θεμάτων χωρίς root. Πριν προχωρήσω πολύ στο τι συμβαίνει εδώ, θα εξηγήσω τι είναι στην πραγματικότητα οι Κατασκευασμένες Επικαλύψεις.

Τι είναι οι κατασκευασμένες επικαλύψεις;

Οι Fabricated Overlays είναι μια νέα δυνατότητα που εισήχθη στο Android 12. Είναι παρόμοια με τις κλασικές επικαλύψεις πόρων χρόνου εκτέλεσης (RRO) που έχει το Android εδώ και μερικά χρόνια. Τόσο οι RRO όσο και οι Κατασκευασμένες Επικαλύψεις μπορούν να παρακάμψουν διαφορετικούς πόρους για διαφορετικές εφαρμογές. Μπορείτε να αλλάξετε ένα boolean από false σε true (ή αντίστροφα), να ορίσετε πόσο μεγάλη θέλετε να είναι η γραμμή κατάστασης και ούτω καθεξής.

Ωστόσο, οι κατασκευασμένες επικαλύψεις έχουν κάποιες αξιοσημείωτες διαφορές από τα RRO. Πρώτον, δεν χρειάζεται να δημιουργήσετε ένα APK επικάλυψης και στη συνέχεια να το εγκαταστήσετε. Αντίθετα, απλώς λέτε στο Android ποιες τιμές θέλετε να αλλάξετε για ποια εφαρμογή και φροντίζει να καταχωρεί τις αλλαγές σας ως επικάλυψη που μπορείτε στη συνέχεια να ενεργοποιήσετε.

Είναι επίσης λίγο πιο περιορισμένοι από τους RRO. Πριν από το Android 11, τα RRO μπορούσαν να παρακάμψουν σχεδόν οποιονδήποτε πόρο: booleans, ακέραιους αριθμούς, διαστάσεις, χαρακτηριστικά, διατάξεις, ακόμη και αρχεία μη επεξεργασμένων δεδομένων. Το Android 11 έκανε κάποιες αλλαγές στον τρόπο λειτουργίας των RRO, καθιστώντας τις παρακάμπτουσες διατάξεις να μην είναι πραγματικά εφικτές πλέον, αν και έκανε τα RRO πιο σταθερά συνολικά.

Οι κατασκευασμένες επικαλύψεις, από την άλλη πλευρά, μπορούν να παρακάμψουν μόνο τιμές που μπορούν να αναπαρασταθούν ως ακέραιοι. Αυτό περιλαμβάνει ακέραιους αριθμούς (duh), διαστάσεις, booleans και χρώματα. Δεν μπορείτε να τα χρησιμοποιήσετε για να παρακάμψετε πόρους ακατέργαστων δεδομένων, διατάξεις, συμβολοσειρές ή πίνακες -- τουλάχιστον όχι εύκολα. Αυτός είναι κάπως αυθαίρετος περιορισμός στο API: δέχεται μόνο ακέραιες τιμές και κατηγορίες πόρων όπως ορίζονται από την κλάση TypedValue. Το TypedValue κάνει υποστήριξη συμβολοσειρές και οι άλλοι τύποι πόρων, αλλά μόνο για αναφορά στον πόρο τους, όχι για να διατηρούν τα πραγματικά τους δεδομένα.

Ωστόσο, αυτοί οι περιορισμοί δεν είναι πολύ μεγάλοι για τον επιδιωκόμενο σκοπό του Fabricated Overlays: Material You και τα εφέ νομίσματος. Οι κατασκευασμένες επικαλύψεις διευκολύνουν το σύστημα να δημιουργεί και να εφαρμόζει επικαλύψεις χρωμάτων και διαστάσεων αμέσως, χωρίς να χρειάζεται επανεκκίνηση ή αναμονή για τη μεταγλώττιση ενός APK.

Τώρα, κανονικά, αυτό θα ήταν απλώς ένα άλλο τακτοποιημένο API για να επωφεληθούν από άτομα με συσκευές με root. Εκτός εάν υπάρχει ένα κενό που έχει δημιουργηθεί από τον κατασκευαστή (όπως αυτό που εκμεταλλεύεται η Synergy στις συσκευές Samsung), οι επικαλύψεις μπορούν να εγκατασταθούν μόνο από τρίτα μέρη με πρόσβαση root. Αυτό είναι το καλύτερο μέρος, όμως -- η Google ξέχασε να επιδιορθώσει μια τρύπα στο Android 12.

Κατασκευασμένες επικαλύψεις χωρίς ρίζα

Το Android 8 εισήγαγε το νέο API της υπηρεσίας Overlay Manager Service (ή OMS) και οι άνθρωποι ανακάλυψαν πολύ γρήγορα ότι τα APK επικάλυψης μπορούσαν να εγκατασταθούν ως κανονικές εφαρμογές και στη συνέχεια να ενεργοποιηθούν χρησιμοποιώντας το ADB. Δυστυχώς, η Google το διορθώθηκε στο Android 9 και από τότε μόνο επικαλύψεις που υπογράφονται με το ίδιο κλειδί με το σύστημα μπορούν να εγκατασταθούν δυναμικά.

Όπως αποδεικνύεται, οι Fabricated Overlays του Android 12 έχουν ένα κενό που θυμίζει αυτό που υπάρχει στο Android 8: δεν χρειάζονται δικαιώματα πρόσβασης root ή άδειες σε επίπεδο υπογραφής. Απλώς χρειάζονται κάτι που τρέχει ως χρήστης του κελύφους (δηλαδή ADB) για να τους καταχωρήσει.

Είναι αρκετά σαφές ότι η Google προόριζε οι Κατασκευασμένες επικαλύψεις να είναι προσβάσιμες μόνο στους χρήστες root και του συστήματος. Υπάρχει μια εφαρμογή εντολών ADB για τη δημιουργία τους και δεν θα εκτελεστεί εάν ο χρήστης που εκτελεί δεν είναι root. Το κενό είναι ότι ο έλεγχος βρίσκεται μόνο στην εντολή, όχι στο πραγματικό API, πράγμα που σημαίνει ότι μπορούμε να το εκμεταλλευτούμε με λίγη δουλειά.

ADB σε συσκευή

Εδώ και πολύ καιρό, το Android έχει μια ασύρματη δυνατότητα ADB. Αυτό επιτρέπει σε έναν υπολογιστή (ή οτιδήποτε με δυαδικό σύστημα ADB και πρόσβαση δικτύου) να συνδεθεί ασύρματα σε μια συσκευή. Προορίζεται κυρίως για συσκευές Android που δεν διαθέτουν συνδέσεις USB προσβάσιμες από τον χρήστη, όπως π.χ έξυπνα ρολόγια και τηλεοράσεις. Επιπλέον, πριν από το Android 11, χρειαζόσασταν μια ενσύρματη σύνδεση ADB για να την ενεργοποιήσετε Ασύρματη Λειτουργία.

Το Android 11 είναι αυτό που έφερε επίσημα το ασύρματο ADB σε τηλέφωνα και tablet. Είναι λίγο πιο περίπλοκο από το κλασικό ασύρματο ADB, με κωδικούς σύζευξης και ελέγχου ταυτότητας, αλλά μπορεί να ενεργοποιηθεί από τον χρήστη εντελώς στη συσκευή, εφόσον η συσκευή είναι συνδεδεμένη σε WiFi. Αυτό σημαίνει ότι είναι δυνατή η σύνδεση στη συσκευή σας μέσω ADB από τη συσκευή σας και το μόνο που χρειάζεστε είναι ένα WiFi σύνδεση.

Χρήση αυξημένων API σε μια εφαρμογή

Υπάρχουν πολλοί λόγοι για τους οποίους μπορεί να θέλετε να χρησιμοποιήσετε περιορισμένα API στην εφαρμογή σας. Συνήθως, είναι επειδή παρέχουν κάποια ειδική λειτουργικότητα που χρειάζεστε. Εφόσον το API που χρειάζεστε έχει εφαρμογή εντολών φλοιού, είναι πολύ εύκολο να το χρησιμοποιήσετε από μια εφαρμογή. Το μόνο που χρειάζεται να κάνετε είναι να δημιουργήσετε μια διεργασία φλοιού ως root (ή ADB), να εκτελέσετε τη σωστή εντολή και να αναλύσετε το αποτέλεσμα, εάν υπάρχει.

Τι γίνεται αν το API δεν διαθέτει υλοποίηση φλοιού ή λείπει κάτι που χρειάζεστε από την εφαρμογή φλοιού; Εάν βρίσκεστε σε μια συσκευή με root, μπορείτε να χρησιμοποιήσετε κάτι σαν libRootJava. Το libRootJava σάς επιτρέπει να αλληλεπιδράτε με τα API πλαισίου Android σαν να εκτελείται η εφαρμογή σας ως χρήστης root. Αυτό είναι και πιο βολικό και πολύ πιο γρήγορο από την εκτέλεση εντολών φλοιού, καθώς είναι όλα στην ίδια γλώσσα και δεν χρειάζεται να ανησυχείτε για τη μη αυτόματη ανάλυση των συμβολοσειρών. Έχει κάποιους περιορισμούς, αλλά ως επί το πλείστον λειτουργεί εξαιρετικά.

Το API libRootJava είναι αρκετά ευέλικτο. Θα μπορούσατε να το προσαρμόσετε ώστε να εκτελείται ως χρήστης του κελύφους αντί για root. Ευτυχώς, δεν χρειάζεται, γιατί κάποιος τα κατάφερε ήδη και λέγεται Σιζούκου. Το Shizuku είναι σχεδόν σαν ένας συνδυασμός Magisk Manager και libRootJava.

Η εφαρμογή Shizuku Manager σάς καθοδηγεί στη ρύθμιση μιας διαδικασίας που εκτελείται ως ο χρήστης του κελύφους στον οποίο μπορεί να έχει πρόσβαση το Shizuku. Η βιβλιοθήκη Shizuku API μπορεί να εφαρμοστεί σε εφαρμογές για να τους επιτρέψει να έχουν πρόσβαση στα API του συστήματος σαν να ήταν ο χρήστης του κελύφους. Είναι μια πολύ πιο συγκεντρωτική διαδικασία από το libRootJava, καθώς το Shizuku χρειάζεται να ρυθμιστεί μόνο μία φορά πριν μπορέσει να το χρησιμοποιήσει κάθε εφαρμογή που υλοποιεί τη βιβλιοθήκη Shizuku API. Εάν ενδιαφέρεστε για το πώς λειτουργεί το Shizuku και πώς μπορείτε να το ενσωματώσετε στην εφαρμογή σας, Έχω έναν οδηγό για αυτό εδώ.

Shizuku και κατασκευασμένες επικαλύψεις

Μέχρι τώρα, μπορείτε πιθανώς να δείτε πού πηγαίνει αυτό. Μπορούμε να χρησιμοποιήσουμε μια υπηρεσία όπως το Shizuku για πρόσβαση στο Fabricated Overlays API ως χρήστης του κελύφους και μπορούμε να χρησιμοποιήσουμε τη δυνατότητα ασύρματης ADB του Android 11 για να αποκτήσουμε πρόσβαση σε επίπεδο κελύφους, όλα στη συσκευή. Δεδομένου ότι ο περιορισμός χρήστη root υπάρχει μόνο στην εντολή Fabricated Overlays κέλυφος και όχι στο πραγματικό API, η εκτέλεση ως χρήστης του κελύφους είναι αρκετή για να χρησιμοποιηθεί απευθείας.

Υλοποίηση: Βιβλιοθήκη και Δείγμα Εφαρμογής

Τι γίνεται με τις λεπτομέρειες εφαρμογής; Λοιπόν, σε έχω καλύψει και για αυτό.

Προετοιμάζοντας γι' αυτό, έφτιαξα και τα δύο α βιβλιοθήκη και ένα πλήρως λειτουργικό δείγμα εφαρμογής χρησιμοποιώντας αυτή τη βιβλιοθήκη.

Η ίδια η βιβλιοθήκη είναι κυρίως για ευκολία. Αναδιπλώνει μερικά από τα κρυφά API του συστήματος και σας παρέχει μερικές βολικές μεθόδους για το χειρισμό των δικαιωμάτων Shizuku. Είναι επίσης ευέλικτο, ώστε να μπορείτε να παρέχετε τη δική σας παρουσία του IOverlayManager API εάν έχετε άλλον τρόπο για να το ανακτήσετε.

Το δείγμα εφαρμογής δείχνει πώς μπορείτε να προχωρήσετε στην υλοποίηση της βιβλιοθήκης χρησιμοποιώντας το Shizuku. Είναι επίσης μια πλήρως λειτουργική και χρήσιμη εφαρμογή. Η κύρια σελίδα εμφανίζει τις εγγεγραμμένες επί του παρόντος κατασκευασμένες επικαλύψεις που δημιουργήθηκαν μέσω αυτής, ομαδοποιημένες ανά εφαρμογή-στόχο. Μπορείτε να τα ενεργοποιήσετε, να τα απενεργοποιήσετε και να τα διαγράψετε και από εκεί.

Πατώντας το κουμπί "Προσθήκη επικάλυψης" στο κάτω μέρος, οδηγείτε σε μια λίστα με όλες τις εφαρμογές με δυνατότητα επικάλυψης. Αναζητήστε ή κάντε κύλιση για να βρείτε αυτό που χρειάζεστε και πατήστε το. Στη συνέχεια, μπορείτε να πατήσετε το κουμπί "Προσθήκη" στο κάτω μέρος της οθόνης για να προβάλετε τη λίστα των πόρων που μπορούν να παρακαμφθούν σε αυτήν την εφαρμογή. Επιλέξτε έναν πόρο, ορίστε την τιμή του και επαναλάβετε για όσες τιμές θέλετε να αλλάξετε. Πατήστε το κουμπί "Αποθήκευση", πληκτρολογήστε ένα όνομα, επιβεβαιώστε και θα επιστρέψετε στην κύρια οθόνη, εμφανίζοντας τώρα τη νέα επικάλυψη, έτοιμη για ενεργοποίηση.

Ακολουθούν μερικά στιγμιότυπα οθόνης από την εφαρμογή, χάρη στον Mishaal Rahman.

Ως δευτερεύουσα σημείωση, έχω επίσης μια γενική εφαρμογή διαχείρισης επικάλυψης που ονομάζεται... Διαχειριστής επικαλύψεων. Η ίδια η προμεταγλωττισμένη εφαρμογή είναι διαθέσιμο μόνο στο Patreon μου, αλλά το Ο πηγαίος κώδικας διατίθεται ελεύθερα σε όποιον θέλει να το μεταγλωττίσει ή να το τροποποιήσει.

συμπέρασμα

Το νέο Fabricated Overlays API στο Android 12 είναι πολύ υπέροχο, κυρίως επειδή δεν χρειάζεται root. Μπορεί να μην είναι τόσο εξελιγμένο όσο ένα πλήρες RRO APK, αλλά σας προσφέρει πολύ μεγαλύτερη ευελιξία χωρίς πρόσβαση root.

Ρίξτε μια ματιά στην εφαρμογή Fabricate Overlay στο GitHub

Εάν έχετε μια συσκευή με Android 12 και θέλετε να το δοκιμάσετε, ρίξτε μια ματιά στο αποθετήριο GitHub που συνδέεται παραπάνω. Η ενότητα Εκδόσεις θα έχει ένα APK για λήψη και χρήση. Η βιβλιοθήκη θα πρέπει να είναι εύκολο να συμπεριληφθεί στη δική σας εφαρμογή χρησιμοποιώντας JitPack.

Φυσικά, δεν πρέπει να περιμένετε ότι αυτό το χαρακτηριστικό θα παραμείνει για πολύ. Στην Google δεν αρέσουν πραγματικά οι επικαλύψεις τρίτων, οπότε αυτό σχεδόν σίγουρα θα διορθωθεί όταν κυκλοφορήσει το Android 13. Στο μεταξύ, όμως, απολαύστε το όσο διαρκεί!