Android Studio 打包Jar

来源:互联网 发布:乐视max2 root软件 编辑:程序博客网 时间:2024/05/17 23:25

Eclipse打包Jar包很容易,直接选择相应的资源打包即可。Android Studio要打包Jar则没有图形界面,只有用gradle来打包。下面就讲述Android Studio打包Jar,并处理Android Studio的terminal中文重码、不能正常输入等问题,gradle禁用lint报错。

一、环境设置

在win10的环境下,Android Studio的terminal会有bug。AS(Android Stuido简写,下同)会显示中文重码,或者字体显示不全,或不能不能正常输入等等,总之就是各种不好用。希望你没有遇到!

那么怎么处理呢?其实也很简单,把它退回到win7模式就行了。具体做法如下:

1)win + R,输入cmd调出terminal。


2)在terminal边框上单击右键调出属性选项,选择使用旧版控制台。


3)最后重启电脑,这是你会发现AS里面的terminal又能正常使用了。

二、打包Jar

先说明一下,下面的打包方法只是打包class类的包,并不包含布局等资源。打包资源需要打包成AAR的形式。

首先,在module应用的gradle里面开头的apply plugin: 'com.android.application'设置为:
apply plugin: 'com.android.library'
再把defaultConfig里面把applicationId "com.example.Test"去掉。
在build时候你会发现在build/intermediates/bundles/release/ 子目录(或build/intermediates/bundles/release/debug目录下,即使不是你运行完下面代码你再找找,就在这附近的了)里生成一个名为classes的jar包。
一般来说,你把这个class.jar提取出来即可。
代码入下:
//删除存在的task clearJar(type: Delete) {    delete 'build/outputs/test.jar'}task makeJar(type: Copy) {        //设置拷贝的文件,如果你发现的AS生成的class.jar目录有变,可以作相应的改变    from('build/intermediates/bundles/release/')        //设置输出目录    into('build/outputs/')        include('classes.jar')    //设置名字        rename ('classes.jar', test.jar')}makeJar.dependsOn(clearJar, build)
这时候上面设置好的terminal就派上用场了。
在AS里面的terminal输入
gradlew makeJar
你的jar就会生成了。
但这种生成jar的方式有个缺点,那就是你全部的class类都被打包了。从代码上可以很明显地看到这个是直接copy了对应目录下已经打包好整个类的class.jar再改名。
如果你想去掉一部分内容再打包呢?
直接打包jar代码如下:
task clearJar(type: Delete) {     delete 'libs/sdk.jar' }  task makeJar(type:org.gradle.api.tasks.bundling.Jar) {    //指定生成的jar名    baseName 'sdk'    //从哪里打包class文件    from('build/intermediates/classes/debug/com/example/testsdk/')    //打包到jar后的目录结构     into('com/example/testdk/')    //去掉不需要打包的目录和文件     exclude('test/', 'BuildConfig.class', 'R.class')    //去掉R$开头的文件     exclude{ it.name.startsWith('R$');} }  makeJar.dependsOn(clearJar, build)
然后再在命令行里输入
gradlew makeJar
你就可以在libs目录下找到这个jar了
想检查效果可以用jd-gui软件查看一下jar包。
总的代码如下:
apply plugin: 'com.android.library'//apply plugin: 'com.android.application'android {    compileSdkVersion 24    buildToolsVersion "24.0.3"    defaultConfig {        //applicationId "com.example.Test"        minSdkVersion 15        targetSdkVersion 20        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    lintOptions {        abortOnError false    }}task clearJar(type: Delete) {    delete 'libs/sdk.jar'}task makeJar(type:org.gradle.api.tasks.bundling.Jar) {    baseName 'sdk'    //设置拷贝的文件    from('build/intermediates/classes/debug/com/example/Test/')    //打进jar包后的文件目录    into('com/example/Test/')    //将classes.jar放入build/libs/目录下    //include ,exclude参数来设置过滤    exclude('view/', 'BuildConfig.class', 'R.class')    exclude{ it.name.startsWith('R$');}    }makeJar.dependsOn(clearJar, build)//在终端执行生成JAR包// gradlew makeJardependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    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:24.2.1'    testCompile 'junit:junit:4.12'    compile files('libs/xxx.jar')}
上面代码你可能眼尖发现多了个这个。
 lintOptions {        abortOnError false    }
这是因为gradle build命令时,会有可能由于lint错误终止。而你又想跳过这个错误接着往下编译,你可以这样设置。
完整版是这样设置的:
android {    //你的配置   defaultConfig { ... }    signingConfigs { ... }    compileOptions { ... }    buildTypes { ... }    // This is important, it will run lint checks but won't abort build    lintOptions {        abortOnError false    }  } 




0 0
原创粉丝点击