在android studio中加入framework.jar的方法 gradle编译中文乱码

在把一个老项目从eclipse迁移到android studio的过程中遇到了添加framework.jar的问题,在百度,google搜了几篇文章,照着攻略实行了一遍,发现仍然无法用framework.jar覆盖android sdk中的api,最后用英文在google中搜索,发现了这篇文章才解决问题,才知道那几篇中文文章里面少了至关重要的一点东西。英文文章链接(可能需要翻墙):https://kwagjj.wordpress.com/2017/08/10/using-framework-jar-in-android-studio/

简要的描述下实现步骤:

1、将framework.jar放进module下的libs目录下

2、在module下的build.gradle里面添加这行代码,然后sync

3、在module下的build.gradle中添加如下脚本,然后sync

preBuild {
 
    doLast {
        def imlFile = file( project.name + ".iml")
        println 'Change ' + project.name + '.iml order'
        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"
            println 'what' + sdkString
            new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK'])
            groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))
        } catch (FileNotFoundException e) {
            // nop, iml not found
            println "no iml found"
        }
    }
}

此脚本是为了调整module下iml文件中的orderEntry的顺序,让framework.jar的优先级在android默认sdk的前面。添加脚本前:

<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK"/>
...
<orderEntry type="library" exported="" name="framework" level="project"/>
添加脚本后:

4、在project根目录下的build.gradle中添加如下代码:

allprojects {
    repositories {
        jcenter()
        google()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar')
        }
    }
}

然后就可以使用framework.jar中的API了,如果不行,rebuild一下。

AndroidStudio用gradle编译中文乱码

在Gradle Scripts下的 

build.gradle(Module:app)文件中,增加一行代码:

android { compileOptions.encoding = "GBK" }  

该文件全文如下:

apply plugin: 'com.android.application' 
 
android { 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 
 
    android { compileOptions.encoding = "GBK" } 
 
    defaultConfig { 
        applicationId "com.jksoft.ebooks" 
        minSdkVersion 15 
        targetSdkVersion 22 
        versionCode 1 
        versionName "1.0" 
    } 
    buildTypes { 
        release { 
            minifyEnabled false 
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
        } 
    } 
} 
dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.1.1' 
} 

猜你喜欢

转载自blog.csdn.net/mafei852213034/article/details/81204918