Erstellen Sie eine JAR-Bibliothek, die eine einfache API implementiert, die die Testzeichenfolge "test" zurückgibt.
Test.java
package com.testlib;
public class Test {
public String getTestString() {
return "test";
}
}
--Jar Schöpfung
$ javac Test.java
$ jar -cvf test-lib.jar *.class
Kopieren Sie das oben erstellte Glas in die unten stehende AOSP-Quelle
/prebuilts/misc/common/test-lib/test-lib.jar
Erstellen Sie auch Android.mk
/prebuilts/misc/common/test-lib/Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_PREBUILT_JAVA_LIBRARIES := test-lib$(COMMON_JAVA_PACKAGE_SUFFIX)
include $(BUILD_HOST_PREBUILT)
Wenn Sie auf die Kachel des Schnelleinstellungsfelds tippen, das Sie entsprechend hinzugefügt haben, ändern Sie die AOSP-Quelle so, dass die von der obigen API erhaltene Zeichenfolge "test" in Toast angezeigt wird.
/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/LoggingTile.java
+import android.widget.Toast;
...
+import com.testlib.Test;
...
@Override
protected void handleClick() {
+ Test test = new Test();
+ Toast.makeText(mContext , test.getTestString(), Toast.LENGTH_SHORT).show();
try {
/frameworks/base/packages/SystemUI/Android.mk
...
LOCAL_STATIC_JAVA_LIBRARIES := \
SystemUI-tags \
SystemUI-proto
LOCAL_STATIC_JAVA_LIBRARIES += test-lib
...
include $(BUILD_PACKAGE)
+include $(CLEAR_VARS)
+LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := test-lib:../../../../prebuilts/misc/common/test-lib/test-+lib.jar#libs/test_lib/test-lib.jar
+include $(BUILD_MULTI_PREBUILT)
include $(call all-makefiles-under,$(LOCAL_PATH))
...
--Bauen
$ make -j4
$ adb remount
$ adb push out/target/product/bullhead/system/priv-app/SystemUI /system/priv-app/
$ adb reboot
Versuchen Sie, auf die Kachel zu tippen
Sie können bestätigen, dass die API der hinzugefügten Bibliothek normal aufgerufen wird.
AWS SDK für Android
Wird unter / prebuilts / misc / common / aws kopiert.
Ich habe eine Fehlermeldung erhalten, wenn Gson nicht gefunden wurde. Kopieren Sie daher das Gson-Glas auch nach / prebuilts / misc / common / gson.
Ändern Sie in ähnlicher Weise, um Lambda aufzurufen, wenn Sie auf eine Kachel tippen.
Offizielle Referenz https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-android-example.html https://docs.aws.amazon.com/ja_jp/aws-mobile/latest/developerguide/how-to-android-lambda.html
Unterschied bei der Änderung der Quelle
Sie können den Fehlerbericht über die Einstellungen abrufen. Fügen Sie jedoch wie oben beschrieben eine Leitung ein, damit Sie den Fehlerbericht abrufen können, wenn Sie auf die Kachel tippen.
packages/SystemUI/src/com/android/systemui/qs/tiles/LoggingTile.java
+ private Handler mHandler = new Handler();
...
@Override
protected void handleClick() {
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ ActivityManager.getService().requestBugReport(
+ ActivityManager.BUGREPORT_OPTION_INTERACTIVE
+ );
+ } catch (RemoteException e) {
+ Log.e(TAG, "requestBugReport() failed");
+ }
+ }
+ }, 500);
try {
Da das Folgende aufgerufen wird, wenn die Erfassung des Fehlerberichts abgeschlossen ist, fügen Sie den Prozess zum Speichern des Fehlerberichts in S3 unten hinzu.
frameworks/base/packages/Shell/src/com/android/shell/BugreportProgressService.java#onBugreportFinished
frameworks/base/packages/Shell/src/com/android/shell/BugreportProgressService.java
private void onBugreportFinished(int id, Intent intent) {
final File bugreportFile = getFileExtra(intent, EXTRA_BUGREPORT);
if (bugreportFile == null) {
// Should never happen, dumpstate always set the file.
Log.wtf(TAG, "Missing " + EXTRA_BUGREPORT + " on intent " + intent);
return;
}
+
+ try {
+ final String S3_ACCESS_KEY = "YOUR_ACCESS_KEY";
+ final String S3_SECRET_KEY = "YOUR_SECRET_KEY";
+ AmazonS3Client S3Client = new AmazonS3Client(
+ new BasicAWSCredentials(S3_ACCESS_KEY, S3_SECRET_KEY)
+ );
+ final String BUCKET_NAME = "aosp_test";
+ PutObjectRequest por = new PutObjectRequest(
+ BUCKET_NAME,
+ bugreportFile.getName(),
+ bugreportFile
+ );
+ S3Client.putObject(por);
+ } catch (final Exception e) {
+ Log.e(TAG, "Failed to save bugreport to S3", e);
+ }
mInfoDialog.onBugreportFinished();
BugreportInfo info = getInfo(id);
Unterschied bei der Änderung der Quelle
Durch Build ersetzen
$ make -j4
$ adb remount
$ adb push out/target/product/bullhead/system/priv-app/SystemUI /system/priv-app/
$ adb push out/target/product/bullhead/system/priv-app/Shell /system/priv-app/
$ adb reboot
Versuchen Sie, auf die Kachel zu tippen.
Es kann bestätigt werden, dass es in S3 gespeichert ist.
Unterschied bei der Änderung der Quelle
Nach dem Tippen auf die Kachel können Sie bestätigen, dass der Datensatz in DynamoDB ↓ gespeichert ist
SystemUI stürzte manchmal aufgrund einer schwerwiegenden Ausnahme wie der Berechtigung android.permission.READ_CONTACTS nach dem Start ab, wurde jedoch einfach durch FDR behoben.
01-22 18:59:06.852: D/AndroidRuntime(4784): Shutting down VM
01-22 18:59:06.855: E/AndroidRuntime(4784): FATAL EXCEPTION: main
01-22 18:59:06.855: E/AndroidRuntime(4784): Process: com.android.systemui, PID: 4784
01-22 18:59:06.855: E/AndroidRuntime(4784): java.lang.RuntimeException: Unable to create service com.android.systemui.SystemUIService: android.view.InflateException: Binary XML file line #73: uid=10062 needs permission android.permission.READ_CONTACTS to read lock_screen_owner_info_enabled for user 0
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3349)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.-wrap4(Unknown Source:0)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Handler.dispatchMessage(Handler.java:106)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Looper.loop(Looper.java:164)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.main(ActivityThread.java:6494)
01-22 18:59:06.855: E/AndroidRuntime(4784): at java.lang.reflect.Method.invoke(Native Method)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
01-22 18:59:06.855: E/AndroidRuntime(4784): Caused by: android.view.InflateException: Binary XML file line #73: uid=10062 needs permission android.permission.READ_CONTACTS to read lock_screen_owner_info_enabled for user 0
01-22 18:59:06.855: E/AndroidRuntime(4784): Caused by: java.lang.SecurityException: uid=10062 needs permission android.permission.READ_CONTACTS to read lock_screen_owner_info_enabled for user 0
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Parcel.readException(Parcel.java:2004)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Parcel.readException(Parcel.java:1950)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.widget.ILockSettings$Stub$Proxy.getBoolean(ILockSettings.java:476)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.widget.LockPatternUtils.getBoolean(LockPatternUtils.java:1271)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.widget.LockPatternUtils.isOwnerInfoEnabled(LockPatternUtils.java:738)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.keyguard.KeyguardStatusView.getOwnerInfo(KeyguardStatusView.java:273)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.keyguard.KeyguardStatusView.updateOwnerInfo(KeyguardStatusView.java:244)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.keyguard.KeyguardStatusView.onFinishInflate(KeyguardStatusView.java:170)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflate(LayoutInflater.java:876)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.parseInclude(LayoutInflater.java:995)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.parseInclude(LayoutInflater.java:995)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.view.View.inflate(View.java:23239)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.statusbar.phone.StatusBar.inflateStatusBarWindow(StatusBar.java:1440)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.statusbar.phone.StatusBar.makeStatusBarView(StatusBar.java:1009)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.statusbar.phone.StatusBar.addStatusBarWindow(StatusBar.java:3664)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.statusbar.phone.StatusBar.createAndAddWindows(StatusBar.java:3660)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.statusbar.phone.StatusBar.start(StatusBar.java:889)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.SystemBars.createStatusBarFromConfig(SystemBars.java:71)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.SystemBars.start(SystemBars.java:42)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.SystemUIApplication.startServicesIfNeeded(SystemUIApplication.java:215)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.SystemUIApplication.startServicesIfNeeded(SystemUIApplication.java:164)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.systemui.SystemUIService.onCreate(SystemUIService.java:33)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.handleCreateService(ActivityThread.java:3339)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.-wrap4(Unknown Source:0)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Handler.dispatchMessage(Handler.java:106)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.os.Looper.loop(Looper.java:164)
01-22 18:59:06.855: E/AndroidRuntime(4784): at android.app.ActivityThread.main(ActivityThread.java:6494)
01-22 18:59:06.855: E/AndroidRuntime(4784): at java.lang.reflect.Method.invoke(Native Method)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
01-22 18:59:06.855: E/AndroidRuntime(4784): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
In DynamoDB wurde, obwohl ich DynamoDBHashKey angehängt habe, die Fehlermeldung angezeigt, dass es nicht wie unten gezeigt gefunden werden kann.
11-06 00:22:42.371: E/AndroidRuntime(832): FATAL EXCEPTION: Thread-3
11-06 00:22:42.371: E/AndroidRuntime(832): Process: com.android.systemui, PID: 832
11-06 00:22:42.371: E/AndroidRuntime(832): com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: No interface com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBHashKey annotation found in class class com.android.systemui.qs.tiles.AOSPTest
11-06 00:22:42.371: E/AndroidRuntime(832): at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.needAutoGenerateAssignableKey(DynamoDBMapper.java:944)
11-06 00:22:42.371: E/AndroidRuntime(832): at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:1008)
11-06 00:22:42.371: E/AndroidRuntime(832): at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:909)
11-06 00:22:42.371: E/AndroidRuntime(832): at com.android.systemui.qs.tiles.LoggingTile$1.run(LoggingTile.java:57)
Es scheint ein Fehler zu sein, eine Ausnahme in der Proguard-Datei zu registrieren, wie unten gezeigt
-keep class com.android.systemui.qs.tiles.AOSPTest { *; }
Recommended Posts