2016-01-15 3 views
1

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

  1. Вытащил boot.oat из устройства под управлением 5.1
  2. Ран oat2dex получить Декс и вскрышных папок
  3. Ран dex2jar на framework.dex и каркасы classes2.dex, получил и работает как шарм after modifying classes2.dex so dex2jar would run
  4. слили две результирующие папки, копировать их содержимое
  5. В/платформы/андроида-22, распакованные android.jar, копируются файлы из предыдущего шага, застегнул его обратно
  6. Android Stu Dio недействительным кэш и перезапустить
  7. Чистый проект

Теперь я получаю приложение: ошибка processDebugResources:

Ошибка: Не удалось завершить выполнение задачи для ': приложение: processDebugResources'.

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Android/sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 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, я пробовал разные версии, ту же ошибку.

На данный момент я действительно не знаю, что еще попробовать - любая помощь будет принята с благодарностью!

ответ

0

Возможно, вы действительно хотите использовать Reflection для доступа к API. Или создайте собственный sdk, который предоставляет необходимые API. CyanogenMod и AOKP используют этот подход для их развития.

Ловушки: Отражение медленно, поэтому используйте с осторожностью.

Создание собственного sdk может иметь другие опасности, такие как нарушение совместимости с устройствами реального мира. Также имейте в виду, что OEM-производители могут изменять скрытые API-интерфейсы для удовлетворения своих требований, поэтому скрытые API-интерфейсы могут отсутствовать на всех устройствах. CyanogenMod может это сделать, потому что они запускают приложения на своей прошивке, чтобы они знали, что существуют API.