Android Studio 编写系统APP

现状
现在Android Studio正在变得越来越流行,几乎所有的APP开发者都开始使用Android Studio, 那我们如何才能够在AS里调用自己的framework.jar而不是SDK里的呢。

问题
当我们需要写一些系统内置的APP时,比如Launcher, Setting之类的,它们经常会使用到一些隐藏的API,而这些API在SDK里是找不到的,或者使用一些我们自己ROM里编写的接口,这时候我们就需要引用我们自己的framework.jar, 否则Android Studio里是编译不过的。

方案
下面就来介绍一下如何在AS里引用自己的framework.jar编写一个系统APK:

  1. 正确找framework.jar

    在源码的out目录下找到我们自己的framework.jar, 它在
    out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
    特别要注意的是,并不是
    out/target/product/your_target/system/framework/framework.jar
    第一个是完整的java library, 而第二个jar包更像是SDK里的framework.jar

  2. 拷贝libs文件夹下,并修改名字

    将classes.jar拷到/projectpath/app/libs/下,并重命名为framework.jar

  3. 在android studio工程下的build.gradle修改成如下

    注意重点添加

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    provided files('libs/framework.jar')//重点添加 provided表示只引用,而不编译到APK里去
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    testCompile 'junit:junit:4.12'
}
//gradle打包时,也需要指定我们自己的framework.jar的位置
//重点start添加 
allprojects {
    repositories {
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
        }
    }
}
//重点end添加 

4.修改显示语法错误

 完成上面这些之后,使用gradle编译的apk使用的就是我们自己的framework.jar里的API。但是这里还有一个小问题,就是你会发现如果代码里调用我们自己添加的API接口时,AS里提示没有这个接口,会显示这里有语法错误。但是事实上,gradle编译的时候确实可以编译通过,并生成可以运行的APK。   这是因为Android Studio里永远会将SDK作为第一个语法解析的jar包。我们可以将/projectpath/app/app.iml里下面的
<orderEntry type="jdk"jdkName="Android API 23 Platform"jdkType="Android SDK"/>
放到最后去,也就是在我们自己的framework.jar之后。然后Android Studio就不会有语法错误提示了。

注意,这样修改之后,只有java文件不会提示语法错误,kotlin文件里仍然会提示语法错误,这个暂时还没有找到解决办法

猜你喜欢

转载自blog.csdn.net/DAo_1990/article/details/78563806
今日推荐