2015-06-23 2 views
9

В настоящее время вы пытаетесь создать android-5.1.0_r5. Я проверил источники и не делал никаких изменений. Однако при компиляции я получаю следующую ошибку.API Ошибка при изменении AOSP 5.1

Checking API: checkpublicapi-current 
out/target/common/obj/PACKAGING/public_api.txt:20: error 5: Added public field android.Manifest.permission.BACKUP 
out/target/common/obj/PACKAGING/public_api.txt:82: error 5: Added public field android.Manifest.permission.INVOKE_CARRIER_SETUP 
out/target/common/obj/PACKAGING/public_api.txt:106: error 5: Added public field android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE 
out/target/common/obj/PACKAGING/public_api.txt:116: error 5: Added public field android.Manifest.permission.RECEIVE_EMERGENCY_BROADCAST 

****************************** 
You have tried to change the API from what has been previously approved. 

To make these errors go away, you have two choices: 
    1) You can add "@hide" javadoc comments to the methods, etc. listed in the 
     errors above. 

    2) You can update current.txt by executing the following command: 
     make update-api 

     To submit the revised current.txt to the main Android repository, 
     you will need approval. 
****************************** 

И отличные общедоступные файлы api txt действительно показывают разницу.

diff frameworks/base/api/current.txt out/target/common/obj/PACKAGING/public_api.txt 
19a20 
>  field public static final java.lang.String BACKUP = "android.permission.BACKUP"; 
80a82 
>  field public static final java.lang.String INVOKE_CARRIER_SETUP = "android.permission.INVOKE_CARRIER_SETUP"; 
103a106 
>  field public static final java.lang.String READ_PRIVILEGED_PHONE_STATE = "android.permission.READ_PRIVILEGED_PHONE_STATE"; 
112a116 
>  field public static final java.lang.String RECEIVE_EMERGENCY_BROADCAST = "android.permission.RECEIVE_EMERGENCY_BROADCAST"; 

Однако я не могу определить, откуда берутся эти дополнительные публичные поля. Есть идеи?

ответ

4

Я вижу записи в моем коде r8, поэтому вы, вероятно, безопасно выполняете make update-api, а когда это заканчивается, запустите команду make как обычно.

9

Не делайте «make update-api», если вы ничего не трогали. Там добавлен еще один apis frameworks/base/res/AndroidManifest.xml, плохо проанализированный с помощью aapt, который использует buggy system/core/libcore/String8.cpp @@ removeAll(), они используют memcpy, но должны быть memmove для перекрытия строк в памяти.

Это проблема на последних машинах сборки Debian (sid) или Ubuntu (16, возможно, 15). Это ошибка Google в libcore/String8.cpp. Исправление находится здесь: https://android.googlesource.com/platform/system/core/+/dd060f01f68ee0e633e9cae24c4e565cda2032bd

Этот человек нашел его (Майкл Скотт) и, возможно, некоторые другие люди тоже. Вот его расследование: https://plus.google.com/+hashcode0f/posts/URHo3hBmfHY

Big up yourself!

+0

> Не делайте «make update-api», если вы ничего не трогали. Это кажется правильным. Но я на 6.0.1 M4B30Z. Но в строке 434 это уже 'memmove (buf + tail, buf + index + skip, next-index - skip); ' Возможно, есть еще одна причина для этой проблемы. –

Смежные вопросы