访问Android 5.1内部API' s

时间:2016-01-15 12:45:53

标签: android android-gradle android-5.1.1-lollipop

我试图访问Android 5.1(22)中隐藏的API,但我在编译项目时遇到了困难。我采取的步骤:

  1. 从运行5.1
  2. 的设备中拉出boot.oat
  3. Ran oat2dex获取dex和odex文件夹
  4. 在framework.dex和framework-classes2.dex上运行dex2jar,让它们像魅力一样工作after modifying classes2.dex so dex2jar would run
  5. 合并两个结果文件夹,复制其内容
  6. 在/ platforms / android-22中,解压缩android.jar,复制上一步中的文件,将其压缩回来
  7. Android Studio使缓存无效并重新启动
  8. 清理项目
  9. 现在我收到了一个应用:processDebugResources错误:

    错误:任务':app:processDebugResources'执行失败。

      

    com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process' command' /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 个答案:

答案 0 :(得分:0)

您可能真的想使用Reflection来访问API。或构建自己的sdk,公开所需的API。 CyanogenMod和AOKP采用这种方法进行开发。

缺陷: 反思很慢,所以谨慎使用。

构建自己的sdk可能会有其他危险,例如破坏与现实世界设备的兼容性。另外请记住,OEM可以自由修改隐藏的API以满足他们的要求,因此隐藏的API可能不存在于所有设备上。 CyanogenMod可以这样做,因为他们在他们的固件上运行应用程序,因此他们知道API存在。