Доступ к внутренним API Android 5.1
Я пытаюсь получить доступ к скрытым API для Android 5.1 (22), но у меня возникают трудности с компиляцией проекта. Шаги, которые я предпринял:
- Вытащил boot.oat с устройства под управлением 5.1
- Запустил oat2dex, чтобы получить папки dex и odex
- Запустил dex2jar на framework.dex и framework-classes2.dex, после модификации classes2.de оба работали как шарм, чтобы dex2jar запускался
- Слил две получившиеся папки, скопировал их содержимое
- В /platform /android-22 разархивировал файл android.jar, скопировал файлы с предыдущего шага, заархивировал его
- Android Studio делает недействительным кеш и перезапускает
- Чистый проект
Теперь я получаю приложение: ошибка processDebugResources:
Ошибка: не удалось выполнить задачу ":app:processDebugResources".
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: процесс 'команда'/Library/Android/sdk/build-tools/22.0.1/aapt'' завершен с ненулевым выходом значение 1
Даже после запуска с --stacktrace и --debug ошибка не очевидна, к сожалению. На данный момент я прочитал весь Интернет, пытаясь выяснить, в чем проблема, но не повезло. Мой файл Gradle выглядит так:
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "<ID>"
minSdkVersion 19
targetSdkVersion 22
versionCode 0
versionName "0.3"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dexOptions {
preDexLibraries = false /*Include these three statements to build app quickly (at least faster than before :p) */
javaMaxHeapSize "4g" // To avoid GC Limit Exception
jumboMode = true // To avoid GC Limit Exception
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:design:22.2.1'
compile 'com.android.support:recyclerview-v7:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'
compile 'com.google.android.gms:play-services-base:6.5.87'
compile 'com.google.android.gms:play-services-location:6.5.87'
compile 'org.androidannotations:androidannotations-api:3.3.2'
apt 'org.androidannotations:androidannotations:3.3.2'
compile 'com.android.support:multidex:1.0.1'
}
Я попытался создать новый проект и скомпилировать, опять та же ошибка, так что я уверен, что это не настройка / зависимости. Я использую gradle build 1.2.3, пробовал разные версии, одна и та же ошибка.
На данный момент я действительно не знаю, что еще попробовать - любая помощь будет принята с благодарностью!
1 ответ
Вы, вероятно, действительно хотите использовать Reflection
чтобы получить доступ к API. Или создайте свой собственный SDK, который предоставляет необходимые API. CyanogenMod и AOKP используют этот подход к своему развитию.
Ловушки: Отражение медленное, поэтому используйте его с осторожностью.
Создание собственного SDK может иметь и другие опасности, такие как нарушение совместимости с реальными устройствами. Также имейте в виду, что производители могут изменять скрытые API-интерфейсы в соответствии со своими требованиями, поэтому скрытые API-интерфейсы могут существовать не на всех устройствах. CyanogenMod может сделать это, потому что они запускают приложения на своих прошивках, поэтому они знают, что API существуют.