Android studio framework.jar调节顺序总结

1.拷贝jar到源码的libs目录

2.编辑AndroidManifest.xml文件

相关说明:
1).添加android:sharedUserId=”android.uid.system”之后应用会变成系统应
用,无需在动态申请权限,直接在AndroidManifest.xml注册权限即可,但是
添加之后应用无法再直接调试,即无法点击开发工具上的

进行调试。如果需要调试时必须需要打包成apk并且进行系统签名, apk的签名
需要保持与系统签名一致。通过 adb install -r xxxxx.apk 进行安装。如果
之前安装过旧版则需要将之前安装的进行卸载adb uninstall [应用包名]。
2).相关权限声明后无需再进行动态申请权限
3 修改[moduleName]\build.gradle文件
1)导入groovy.xml.XmlUtil包

2)修改libs顺序
Android拥有大量的@hide方法和类, google处于安全考虑进行了隐藏和未公开,每个平台或多或少都会在framework进行方法的定义和删减,所以Androidstudio使用的SDK与运行的平台SDK存在极大的差异。也出现了以下情况google定义了com.****.xxxx();方法,各个平台也定义了com.****.xxxx();如果直接将我们的framework.jar导入,使用时依旧会通过配置列表,去找寻第一引用进行编译。文件位置位于

比较旧版本的文件地址可能在module同级的目录一般为[moduleName].iml,具体得看项目实际产生的位置。
在android节点内添加以下代码

android {
…….
preBuild {
 doLast {
 def imlFile =
  "$rootProject.projectDir\\.idea\\modules\\$project.name\\$rootProject.name"+"."+project.name+'.iml'
 println 'Change ' + imlFile
 try {
  def parsedXml = (new XmlParser()).parse(imlFile)
  def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' }
  parsedXml.component[1].remove(jdkNode)
  def sdkString = "Android API " +android.compileSdkVersion.substring("android-".length()) + " Platform"
new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName':sdkString, 'jdkType': 'Android SDK'])
XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
     } catch (FileNotFoundException e) {
      println e.message
      }
  }
}


比较新的Android studio可以单独在build.gradle运行相应的方法,点击1以后会run选项卡进行打印

此时需要观察Change后面的字符与当前项目的iml文件是不是一致的,如果不一致则需要重新定义imlFile常量使其与当前项目的iml文件一致。 如果成功执行后项目的iml文件中Android的sdb会被移动到最底部,而develop.jar则会在最顶部。


2.[moduleName]\build.gradle文件底部添加以下代码
//修改sdk编译顺序(定制的sdk放到原生的sdk之前)

gradle.projectsEvaluated {
  tasks.withType(JavaCompile) {
   options.bootstrapClasspath = files(file('libs/develop.jar'),options.bootstrapClasspath)
  }
}

发表回复

CAPTCHAis initialing...