关闭

Android Studio 打包Jar

标签: Android studioJar打包gradle
232人阅读 评论(0) 收藏 举报
分类:

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




0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android——打包篇:Android Studio将代码打包成jar包

一、新建一个demo项目,再新建一个model模块 然后再app中的build.gradle中添加如下model的依赖。然后编译项目。 二、编译完成后,打开model下的build——intermed...
  • qq_35373333
  • qq_35373333
  • 2017-07-25 10:30
  • 583

如何使用Android Studio打包混淆的Jar

使用AS打包混淆Jar包,百度一下,一片一片的,但是很多都是零零散散的写得不是很详细或是直接拷贝,按照他们的教程测试总不是很顺利,所以这里我就把我个人学习AS打包混淆Jar的成果总结出来,希望对大家有...
  • xqkillua
  • xqkillua
  • 2017-03-15 17:11
  • 1392

Android Studio 将公共工具库打成jar包和arr包的方法!

首先说下jar包和arr包的区别,打jar包里只能将库里的源码打进去,而资源什么的不能打进去,所以在使用jar包的时候,如果要使用jar包里的资源就要使用反射来实现不然就会有问题!而打arr包的时候A...
  • github_36962753
  • github_36962753
  • 2017-03-01 09:36
  • 1465

android studio 将引用第三方jar和.so的项目打包jar并混淆

android studio 将引用第三方jar和.so的项目打包jar并混淆公司项目要打包jar,项目比较特殊引用了第三方jar和.so,在网上也找了很多文章查看,基本找不到有引用第三方.so的,无...
  • sziitjin
  • sziitjin
  • 2017-04-13 14:06
  • 2358

Android Studio 打包成jar文件并混淆代码

开展项目合作时,对方要用到你的程序,而你又不想将源代码给对方,通常会将程序进行打包生成jar,并作混淆处理,然而效果并不见得有多么好,只是将private的变量隐藏。 1、创建library 【Fil...
  • renwudao24
  • renwudao24
  • 2017-04-05 10:40
  • 1021

Android studio 打jar包带资源ID名称,可作为SDK用途

以前没给别人提供过SDK,也就没想过这方面的事情,都是使用其他公司的SDK,比如QQ 微信分享,用起来是很爽,但是在目前这个阶段提供一个给其他小伙伴用就悲剧了 接到这个任务,总不能任性的说不搞,除非不...
  • msn465780
  • msn465780
  • 2015-11-22 18:40
  • 2073

Android Studio生成自定义jar包(同时将assets目录打入jar包)(一)(by 星空武哥)

转载请标注原创地址:     众所周知android studio会在library所依赖的app运行或者build之后自动生成jar,路径为build/intermediates/bundles/...
  • lsyz0021
  • lsyz0021
  • 2016-08-09 18:07
  • 6709

AndroidStudio工具将Module项目导出成Jar和arr库

该篇首先讲述利用AndroidStudio如何把一个module项目导出并转化成jar,大家都知道eclipse将项目导出jar是非常容易的,由于eclipse已经过时,这里就不多说了,下面跟我一起去...
  • liulei823581722
  • liulei823581722
  • 2016-10-25 10:57
  • 2592

Android Studio 打包jar中包含另一个jar或多个jar时解决方案

关于.jar文件:平时我们Android项目开发中经常会用到第三方的.jar文件。其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(res、图片等...
  • a_Chaon
  • a_Chaon
  • 2017-06-19 17:12
  • 1044

Android Studio导出Jar包并混淆

最近公司项目需要AS混淆打jar,在百度上搜索“AS打jar包并混淆”,一下出来好多面,试了很多网上的方法几乎都出问题,最后根据其中一种自己做了修改,结果打jar并混淆成功,现在将成果分享给大家,希望...
  • qq_36251093
  • qq_36251093
  • 2016-11-02 10:20
  • 2110
    个人资料
    • 访问:36891次
    • 积分:683
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论