Доступ к внутренним API Android 5.1

Я пытаюсь получить доступ к скрытым API для Android 5.1 (22), но у меня возникают трудности с компиляцией проекта. Шаги, которые я предпринял:

  1. Вытащил boot.oat с устройства под управлением 5.1
  2. Запустил oat2dex, чтобы получить папки dex и odex
  3. Запустил dex2jar на framework.dex и framework-classes2.dex, после модификации classes2.de оба работали как шарм, чтобы dex2jar запускался
  4. Слил две получившиеся папки, скопировал их содержимое
  5. В /platform /android-22 разархивировал файл android.jar, скопировал файлы с предыдущего шага, заархивировал его
  6. Android Studio делает недействительным кеш и перезапускает
  7. Чистый проект

Теперь я получаю приложение: ошибка 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 существуют.

Другие вопросы по тегам