Android Studio添加framework.jar编译
2017-10-12 23:22
357 查看
创建Module
配置Dependency
配置依赖Order
配置编译Option
转载请注明链接
因为工作性质的需要,经常需要对framework添加api或是静态变量,然后基于修改后的framework代码进行App的开发工作,这样就不得不时刻更新SDK,以便App开发能够顺利进行,但是鉴于编译SDK然后加载使用比较复杂,时间成本较高,所以使用编译的framework.jar进行快速替代开发则不失为一种很好的策略。
在Eclipse的开发环境下,使用framework.jar替代SDK非常简单,仅仅需要引入外部jar,并将依赖顺序调整为framework.jar最优先,这样就可以快速生成APK,安装到编译的最新系统里进行测试。但是项目移植到Android Studio后发现优先使用framework.jar的方案失效,经过查找测试,确定了以下方案,保证jar的顺利导入及多Module共享配置。
开发环境为:Android Studio 2.3 + Ubuntu14.4,
具体的导入jar包步骤如下:
当然也可以不创建新的Module,在需要依赖framework.jar的Module下新建libs文件夹,将framework.jar拷贝至libs文件夹下,然后依赖此jar包也可。这样就只有此Module可以依赖jar。
将其移动至
代码行前面,保存。
这时候执行sync,那些找不到的变量就不再报错,但是BuildAPK仍然会出错。
注意:这个iml的顺序每次在sync之后都会变回默认的,sync完记得再把对framework的Dependency移到SDK前面。这个iml文件依赖顺序仅仅是影响静态编译检查,不影响Build APK,也就是说下面的编译option配置正确,纵使有错误提示也不影响APK的生成。
Project级别的配置:
在Project的build.gradle中添加:
这样所有的Module都会将采用framework.jar编译生成APK。上面添加的路径:
//home//XXX//tools//lib//framework_intermediates//framework.jar
为添加framework.jar全路径。注意路径采用//分隔符,对于Ubuntu系统为//,Windows系统应该使用\
Module级别的配置:
与Project级别雷同,在Module的build.gradle中添加编译参数即可。
另外如果编译时还需要依赖其他的jar,如service.jar(该jar包时framework/base路径下的services目录编译产生,系统级服务的API或是变量会放在service.jar中),只需要 “;” 隔开,加上依赖的jar路径即可,如下所示:
配置Dependency
配置依赖Order
配置编译Option
转载请注明链接
因为工作性质的需要,经常需要对framework添加api或是静态变量,然后基于修改后的framework代码进行App的开发工作,这样就不得不时刻更新SDK,以便App开发能够顺利进行,但是鉴于编译SDK然后加载使用比较复杂,时间成本较高,所以使用编译的framework.jar进行快速替代开发则不失为一种很好的策略。
在Eclipse的开发环境下,使用framework.jar替代SDK非常简单,仅仅需要引入外部jar,并将依赖顺序调整为framework.jar最优先,这样就可以快速生成APK,安装到编译的最新系统里进行测试。但是项目移植到Android Studio后发现优先使用framework.jar的方案失效,经过查找测试,确定了以下方案,保证jar的顺利导入及多Module共享配置。
开发环境为:Android Studio 2.3 + Ubuntu14.4,
具体的导入jar包步骤如下:
1. 创建Module:
在project下新建Module,选择Import .jar/.aar package,生成一个包含framework.jar的Module,这样可以保证project下的所有Modules都可以使用此依赖。当然也可以不创建新的Module,在需要依赖framework.jar的Module下新建libs文件夹,将framework.jar拷贝至libs文件夹下,然后依赖此jar包也可。这样就只有此Module可以依赖jar。
2. 配置Dependency:
进入Project Structure,在需要依赖framework.jar的Module上,添加Dependencies,选择Module Dependency,选择第1步建立的Module,注意Scope选择Provided,这样这个10M的framework.jar就不会编译到App中。将这个Dependency上移至顶部。3. 配置依赖Order:
经过1、2步配置仍有SDK中找不到变量的错误,这是需要修改Module的.iml,更改依赖顺序:<orderEntry type="module" module-name="framework" exported="" />
将其移动至
<orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />
代码行前面,保存。
这时候执行sync,那些找不到的变量就不再报错,但是BuildAPK仍然会出错。
注意:这个iml的顺序每次在sync之后都会变回默认的,sync完记得再把对framework的Dependency移到SDK前面。这个iml文件依赖顺序仅仅是影响静态编译检查,不影响Build APK,也就是说下面的编译option配置正确,纵使有错误提示也不影响APK的生成。
4. 配置编译Option:
尽快前三步已经可以消除编译错误,但是在真正BuildAPK时仍会报错,这样就需要添加编译参数,在生成APK时优先使用framework.jar,这个配置可以分为Project级别的配置及Module级别的配置:Project级别的配置:
在Project的build.gradle中添加:
allprojects { repositories { jcenter() } gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p://home//XXX//tools//lib// framework_intermediates//framework.jar') } }
这样所有的Module都会将采用framework.jar编译生成APK。上面添加的路径:
//home//XXX//tools//lib//framework_intermediates//framework.jar
为添加framework.jar全路径。注意路径采用//分隔符,对于Ubuntu系统为//,Windows系统应该使用\
Module级别的配置:
与Project级别雷同,在Module的build.gradle中添加编译参数即可。
另外如果编译时还需要依赖其他的jar,如service.jar(该jar包时framework/base路径下的services目录编译产生,系统级服务的API或是变量会放在service.jar中),只需要 “;” 隔开,加上依赖的jar路径即可,如下所示:
gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('- Xbootclasspath/p://home//XXX//tools//lib// framework_intermediates//framework.jar; //home//XXX//tools//lib// service_intermediates//service.jar') } }
相关文章推荐
- Android Studio 优先源码编译的framework.jar(android.jar)
- Android Studio 添加framework.jar等系统jar
- 【Android开发遇错】Android studio 添加jar后编译报错Error converting bytecode to dex: Cause: Dex cannot pars
- 解决Android Studio 项目中添加外部Jar库后项目无法编译的问题
- Android Studio添加第三放JAR后无法编译问题解决方案
- Android Studio 2.3.3 添加ksoap2的引用(拒绝网上其他的忽悠),也适用于添加其他Jar的引用
- android studio添加jar后不识别
- APP添加jar包在源码下编译
- android5.0以后 framework 添加资源 编译 id can not find symbol问题
- android studio 添加第三方jar
- Eclipse混淆文件导入Android Studio Gradle编译报input jar file is specified twice
- Eclipse混淆文件导入Android Studio Gradle编译报input jar file is specified twice
- android Studio 混淆打包jar,已经添加其他文件到jar
- Android studio导入framework编译的classes.jar包
- 手动添加jar包到android studio项目中
- Java反编译工具(以反编译android的framework.jar举例)
- android studio 中如何添加导入第三方库(静态库jar文件、动态库so文件)
- Android framework中修改或者添加资源无变化或编译不通过问题详解
- 【Android Studio】AS使用记录00(导入系统framework.jar包)
- Android Studio如何添加一个编译依赖库