Okloong的博客

先做出来了,再探索,在探索过程中完成知识的系统化

Android Studio 打包Jar

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 makeJar

dependencies {
    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  
  }  
} 




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongago/article/details/52843619
个人分类: Android
想对作者说点什么? 我来说一句

AndroidStudio项目打包jar

2017年04月13日 659KB 下载

没有更多推荐了,返回首页

不良信息举报

Android Studio 打包Jar

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭