双系统如何删除ubuntuu系统的gradle

Ubuntu Linux14 64位下在Android studio下用gradle编译Andrid项目时发生libz.so.1共享库找不到的解决办法 - Linux/Unix当前位置:& &&&Ubuntu Linux14 64位下在Android studio下用gradleUbuntu Linux14 64位下在Android studio下用gradle编译Andrid项目时发生libz.so.1共享库找不到的解决办法&&网友分享于:&&浏览:0次Ubuntu Linux14 64位下在Android studio下用gradle编译Andrid项目时发生libz.so.1共享库找不到的解决方法。---恢复内容开始---
我在Ubuntu14 64为下安装了AS,但在用Gradle编译项目时总是报找不到 libz.so.1的错误。
error while loading shared librarieserror while loading shared libraries: : libz.so.1libz.so.1: : cannot open shared object filecannot open shared object file: : No such file or directoryNo such file or director
上面的就是所报的错误,表示这个共享库找不到了。
下面使用apt-file命令搜索这个文件,首先如果系统中没安装这个命令的要先安装:
sudo apt-get install apt-file
有可能会提示你更新
sudo apt-file update
使用命令搜索:
sudo apt-file search libz.so.1
我的系统所得到的结果:
lib32z1: /usr/lib32/libz.so.1lib32z1: /usr/lib32/libz.so.1.2.8libx32z1: /usr/libx32/libz.so.1libx32z1: /usr/libx32/libz.so.1.2.8zlib1g: /lib/x86_64-linux-gnu/libz.so.1zlib1g: /lib/x86_64-linux-gnu/libz.so.1.2.8
开始的时候我进入了/usr/lib32,但没发现有libz.so.1这个文件,尽管查出来了,但就是没看到在那。
至于/usr/libx32,我TMD连这个目录都打不开,提示不存在,好吧,linux新手,很多都搞不懂.
然后我进入/lib/x86_64-linux-gnu/目录下,发现libz.so.1只不过是一个链接文件,链接的是libz.so.1.2.8,好吧,不管那么多,
将libz.so.1.2.8复制到SDK中的build-tools/lib/ 目录下,当然,名称最好改为libz.so.1最好。(其实也可以用软链接,不过我在网上看到有的网友说软链接有问题,嘛,新手还是保险低点,先把问题解决在说其他的。)
然后再用as编译 ,在日志中还是有错误,不过错误变成了无法使用当前64位的共享库,嘛,好像是因为SDK只有32位的,所以64位的共享库无法使用,好吧,看来只有使用32位的了。
使用命令:
sudo apt-get install lib32z1
一定要sudo才行哦。然后在到/usr/lib32目录下去就看到有了libz.so.1.2.8这个文件,好了,将这个文件复制或链接到build-tools/lib/ 下就可以了。
花了我一天,其实也不是什么复杂的东东,只能说,百度真的很烂。
郁闷,今天打开Android Studio 1.3时发现无法新建项目了,每次在输入项目名的那个页面点击Next后就没反应了,软件也被卡死了,然后呢,我就把sdk下的的/lib/libz.so.1链接删除了,把现有软件删除后重新从zip文件中解压出来后重新打开,又可以运行了,而且就是没有引入libz.so.1也可以编译Android项目,不知道怎么回事。
1,SDK终于下完整了。(不过我觉得不太可能,好像也没下什么特别的文件啊!)
2,Ubuntu更新了。我的Ubuntu是64位的,装的是gnome3桌面系统,我发觉我的系统启动画面变了,原来启动时是直接从开始操作系统选择窗口跳至用户登录窗口,然后输入用户名密码就可登录,现在会在之间插入两屏字符刷一下屏,搞不懂,而且我感觉第一次登录系统后以图形化的方式启动软件好慢,以前就没这中感觉。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有快速了解Android Studio的Gradle
(window.slotbydup=window.slotbydup || []).push({
id: '2611110',
container: s,
size: '240,200',
display: 'inlay-fix'
您当前位置: &
[ 所属分类
前言在阅读本文章之前,期望你已经了解了这些内容:
gradle是什么,它有哪些基本特性gradle task的基本概念和写法
本人使用的环境:LUbuntu 14.04,AndroidStudio 1.3.2,其自带Gradle 2.4Gradle Scripts使用AndroidStudio新建一个Android项目,一直默认直到创建完成,然后点开AndroidStudio左边的Project面板,可以看到如下工程组织:
先简单粗暴的来看看这些文件是什么鬼。
build.gradle (Project: MyApplication)这是Android项目根目录下的build.gradle,此文件名是一个约定名字,gradle将依赖它来构建项目。一个项目可以包括多个工程,gradle可以构建多个工程,每个工程子目录都可以有build.gradle文件,如同make构建工具与Makefile文件的关系。我们做的大部分工作,也就是编写和组织build.gradle文件。build.gradle (Module: app)这是Android项目根目录/app/build.gradle,app是一个gradle工程,这里的build.gradle文件就是用来描述如何构建app工程,gradle可以支持构建多个工程,并设置工程之间的依赖关系。gradle-wrapper.propertiesGradle Wrapper 是Android对gradle的使用进行一些必要的封装而成的脚本——gradlew(位于项目根目录下,用于命令行使用,在集成环境中非常有用),它会自动检测当前项目指定的gradle版本是否存在,如果不存在则自己下载(保存在~/.gradle/wrapper/)。所以每一个Android项目下都有自己的gradle软件包,官方建议把这些包也提交进源码管理系统中,这样编译此项目的系统(如持续集成服务器)不需要事先(手动)安装gradle。 gradle-wrapper.properties里的配置影响Gradle Wrapper的运作,其中distributionUrl属性指定从哪里下载gradle,当然,如果我们不想让它自己下载,可以用distributionPath指定手工下载的本地的gradle包。(进阶:具它wrapper相关的设置参见: Wrapper API )另外,Android默认创建了一个叫wrapper的gralde task,通过使用这个task,就可以在工程的build.gradle里面访问和修改wrapper属性。proguard-rules.proproguard是一个用来混淆java代码的开源项目,Android项目把它集成了进来,先不管。gradle.properties因为gradle是java程序,它将在JVM环境中运行,此文件用来指定gradle如何运行(或叫构建环境),包括:
开启gradle的daemon并行构建模式,设置JVM内存参数,加速构建。可以自定义属性(key和value),这些属性可以传递给gradle的java程序,也可以被build.grade访问。
gradle提供了多种方法为构建环境添加属性:
命令行执行gradle带\-D参数,\-D参数也会传递给java(这里指运行gradle的java程序)写在gradle.properties文件里面,而且每个子工程目录下都可以有自己的gradle.properties文件写在 GRADLE_USER_HOME 环境变量所指目录下的gradle.properties中。写在以 ORG_GRADLE_PROJECT_ 开头的环境变量里。以上方式可以同时使用,gradle按以上列出的顺序(优先级从低到高)进行分析,若属性有冲突,保留优先级高的配置。
设置代理。现在此文件默认什么都没配置,先不管。settings.gradle这个文件也是gradle约定命名的,默认只有一行代码 include ':app' ,表示当前项目只有一个模块(我们习惯叫工程,gradle习惯叫模块),app是目录名,同时也作为工程名。当有多个工程的时候,可以在此添加。local.properties默认内容是Android SDK和NDK的配置路径,这是我之前在AndroidStudio配置过的,此文件不需要我们修改,在IDE的设置会自动覆盖此文件的设置,此文件不应该commit到源码管理系统中,因为它是个人环境的配置。
好,下面我们具体来看build.gradle文件。根目录的build.gradle// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript {repositories { jcenter()}dependencies { classpath 'com.android.tools.build:gradle:1.3.0' // NOTE: Do not place your applicati they belong // in the individual module build.gradle files}}allprojects {repositories { jcenter()}}这是一个最顶层的gradle工程。gradle工程在gradle系统中用一个 project对象 )表示,它有如下一些元素:allprojects { }artifacts { }buildscript { }configurations { }dependencies { }repositories { }sourceSets { }subprojects { }publishing { }下面我们只对相关的进行探索。Gradle PluginsGradle内核集成了很多插件(比如编译java代码的插件),使用插件,我们只需要做很少的工作就可以完成常规的构建任务。以.jar文件打包成的插件叫二进制插件,在使用这种插件之前,得把它添加到当前构建脚本的classpath中。buildscriptbuildscript是gradle工程中定义的一个方法,可以传入一个语句块(有人叫闭包),这个语句块返回一个ScriptHandler对象。查看 ScriptHandler对象的API 得知,ScriptHandler包含两个方法:repositories和dependencies,调用dependencies设置构建时依赖什么东西,调用repositories设置这些依赖来自哪里的仓库。现在明白了,上面的代码其实就是为Android的gradle插件指定位置和版本。allprojects这也是gradle的特性,gradle支持在根build.gradle里使用allprojects,事先对整个构建可能包含的所有工程进行统一的配置,上面的代码就是给所有工程都配置了 jcenter仓库 ,这样工程所依赖的第三方库在构建过程中都会被自动下载。如果多个工程(子工程)有相同的行为或属性要配置,使用这个是很方便的。app工程下的build.gradleapply plugin: 'com.android.application'android {compileSdkVersion 21buildToolsVersion "22.0.1"defaultConfig { applicationId "example.jk.myapplication" minSdkVersion 19 targetSdkVersion 21 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.2.0'}apply pluginapply plugin: 'com.android.application' 应用Android的gradle插件到当前构建脚本,此插件其实继承自gradle的application插件,使用application插件,可以通过添加task来运行或把Java项目构建为基于命令行的程序。Android gradle插件具有application插件的功能,同时会应用java插件和distribution插件,后两个插件用来自动化编译和发布java程序的。android这个Android gradle插件提供的元素,用于配置android相关的构建选项,包括:
compileSdkVersion 指定构建时使用的Android SDK版本buildToolsVersion 指定构建工具的版本,构建工具可以使用Android SDK Manager来安装,可以安装多个版本,如图:
官方建议这里指定的构建工具的版本最好大于等于目标SDK版本(targetSdkVersion)。defaultConfig元素里的配置对应AndroidManifest.xml文件,优先级比AndroidManifest.xml文件里的配置高。gradle支持对一个项目构建多种版本,比如试用版 、商业版,每个版本可以有自己的defaultConfig。buildTypes元素默认定义了debug和release两种构建,debug构建出来的APK将包含调试符号,并且以debug key进行签名,而release类型的默认是没有签名的。minifyEnabled为true表示启用自动清除无用代码,用于软件包瘦身。proguardFiles指定了代码混淆使用的相关文件。工程依赖dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0'}这里的dependencies是gradle工程定义的元素,指定此工程依赖什么。compile这个方法指定要添加什么来编译主程序,这些东西将最终被打包进APK中。fileTree(dir: 'libs', include: ['*.jar']) 将返回一个文件树对象,这些文件位于app/libs目录,并以.jar结尾。整句代码的意思就是把当前工程目录的libs目录下所有jar文件加入编译时classpath中,并打包进APK。这是本地二进制库依赖的写法。而 compile 'com.android.support:appcompat-v7:22.2.0' 表示依赖位于仓库中的appcompat库及其版本,位于Android Support Library中,如果本地没有安装Android Support Library,使用Android SDK Manager进行下载。(进阶:当然,还可以指定依赖其它工程,以及除compile外的其它依赖类型,??体见 《依赖管理介绍》 )至此,我们已经大概了解了AndroidStudio默认工程有关gradle的脚本。其实AndroidStudio IDE提供了很多设置,这些设置修改后,AndroidStudio会自动更新相关的build.gradle和*.properties文件。如果我们手工编辑build.gradle文件,AndroidStudio将提示我们进行sync(同步)操作,以便这些配置反映到IDE界面上。参考链接:
《Gradle Plugin User Guide》 /tech-docs/new-build-system/user-guide《Gradle User Guide》 https://docs.gradle.org/current/userguide/userguide_single.html《Build configuration Basics》 /tools/building/configuring-gradle.html《project对象》 https://docs.gradle.org/current/dsl/org.gradle.api.Project.html#org.gradle.api.Project:dependencies(groovy.lang.Closure) )
更多Android Studio相关内容可以看看以下的有用链接:在Ubuntu 15.04下安装Android Studio /Linux/318.htmUbuntu 12.04(64位)安装Android Studio 全过程 http://www.codesec.net/Linux/12.htmAndroid Studio v0.1尝鲜 http://www.codesec.net/Linux/81.htmAndroid Studio使用教程 http://www.codesec.net/Linux/79.htmAndroid Studio开发指南 http://www.codesec.net/Linux/43.htmAndroid Studio设置主题 和 不支持中文的问题解决方法 http://www.codesec.net/Linux/88.htmAndroid Studio 下载安装以及不能打开的解决办法 http://www.codesec.net/Linux/09.htmAndroid Studio安装使用图文教程 http://www.codesec.net/Linux/914.htmUbuntu上安装Android Studio 1.3(谷歌 Android IDE 开发) http://www.codesec.net/Linux/004.htmAndroid Studio 的详细介绍:请点这里Android Studio 的下载地址:请点这里本文地址:http://www.codesec.net/Linux/628.htm
本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统
转载请注明本文标题:本站链接:
分享请点击:
1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
阅读(3297)
CodeSecTeam微信公众号
你羡慕的人,背后已经经历无数挫折和冷眼,越成功越容易忘记伤口有多疼。这个世界就是这样,人情淡漠,没人会关心你付出了多少努力,受挫的过程有多难受,所以永远不要试图在别人身上寻求安慰和同情,当初选择的路,跪着也走完,宁愿被别人嫉妒着鄙夷,也不要成为平凡的笑柄。
手机客户端
,专注代码审计及安全周边编程,转载请注明出处:http://www.codesec.net
转载文章如有侵权,请邮件 admin[at]codesec.netAndroid项目中如何用好构建神器Gradle?
发表于 10:36|
作者贾吉鑫
摘要:本文作者贾吉鑫为大众点评Android工程师,在进行团队并行开发时,分库遇到的问题很多都要通过Gradle脚本解决。Gradle虽为构建神器,但学习曲线比较陡峭,要想在Android项目中用好Gradle必须要做到三点。
CSDN移动将持续为您优选移动开发的精华内容,共同探讨移动开发的技术热点话题,涵盖移动应用、开发工具、移动游戏及引擎、智能硬件、物联网等方方面面。如果您想投稿、参与内容翻译工作,或寻求近匠报道,请发送邮件至tangxy#csdn.net(请把#改成@)。&
最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度。分库遇到了一些问题,很多都要通过Gradle脚本解决,所以稍微花时间研究了一下。
Gradle虽为构建神器,但感觉学习曲线比较陡峭。内容很多,但有点太多了,多的你看不完,一篇文章主要讲了Android相关的配置,看完可能感觉马马虎虎会用,但到了修改一些构建流程的时候还是不知所措。经过一段时间的摸索,我觉得在Android项目中用好Gradle,你要做到以下三点:
了解Groovy基本语法。
粗读Gradle User Guide和Gradle Plugin User Guide。
实战,实战,再实战。(三遍,你懂的)
涉及到的知识点和内容比较多,我不会一一讲解,本文主要会解答自己学习过程中的一些疑问,讲解一些相关概念和实战经验,过程中也会推荐一些有质量的博客文章。
Groovy语言
Gradle基于Groovy语言,虽然接触Gradle比较久,甚至写过一点Groovy语句,但对语言本身并不了解。为什么用Groovy呢?Groovy运行在JVM上,在Java语言的基础上,借鉴了脚本语言的诸多特性,相比Java代码量更少,Groovy兼容Java,可以使用Groovy和Java混合编程,可以直接使用各种Java类库。
Groovy语法的学习,推荐官方文章和IBM developerWorks的。了解了基本语法,对读写gradle脚本都会有帮助,比如随便举下面几个例子:
比如为何在gradle脚本中使用InputStream不用import包,而使用ZipFile需要import包?因为groovy默认import了下面的包和类,无需再import.
java.lang.*
java.math.BigDecimal
java.math.BigInteger
java.net.*
java.util.*
groovy.lang.*
groovy.util.*
经常看到${var1}的用法是怎么回事? 这是Groovy中的,可以在双引号中直接使用,用于字符串叠加非常方便。
def dx = tasks.findByName("dex${variant.name.capitalize()}")
下面的代码你真的能看懂吗?
//apply是一个方法,plugin是参数,值为'com.android.application'
apply plugin: 'com.android.application'
*buildscript,repositories和dependencies本身是方法名。
*后面跟的大括号部分,都是一个闭包,作为方法的参数。
*闭包可以简单的理解为一个代码块或方法指针。
buildscript {
repositories {
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
//groovy遍历的一种写法 each后面是闭包
android.applicationVariants.each { variant -&
Gradle概念
下面讲几个Gradle相关的概念,几个比较重要的吧,更多的东西还是要自己去看Gradle User Guide。
Gradle构建系统有自己的,初始化、配置和运行三个阶段。
初始化阶段,会去读取根工程中setting.gradle中的include信息,决定有哪几个工程加入构建,创建project实例,比如下面有三个工程:
include ':app', ':lib1', ':lib2'
配置阶段,会去执行所有工程的build.gradle脚本,配置project对象,一个对象由多个任务组成,此阶段也会去创建、配置task及相关信息。
运行阶段,根据gradle命令传递过来的task名称,执行相关依赖任务。
很多文章都会告诉你,任务创建要这样:
task hello {
println "hello"
或者用&&替换doLast,那我就很纳闷,定义个任务怎么这么麻烦,还要加什么doLast,我直接这样不行吗?
task hello {
println "hello"
上面的这种写法,“hello” 是在gradle的配置阶段打印出来的,而前面的写法是在gradle的运行阶段打印出来的,所以怎么写要看你的需求了。
另外task中有一个action list,task运行时会顺序执行action list中的action,doLast或者doFirst后面跟的闭包就是一个action,doLast是把action插入到list的最后面,而doFirst是把action插入到list的最前面。
当我们在Android工程中执行./gradlew build的时候,会有很多任务运行,因为build任务依赖了很多任务,要先执行依赖任务才能运行当前任务。任务依赖主要使用dependsOn方法,如下所示:
task A && {println 'Hello from A'}
task B && {println 'Hello from B'}
task C && {println 'Hello from C'}
B.dependsOn A
C.dependsOn B
了解更多,可以看一下侦跃翻译的。
你在执行gradle命令的时候,是不是经常看到有些任务后面跟着[UP-TO-DATE],这是怎么回事?
在Gradle中,每一个task都有inputs和outputs,如果在执行一个Task时,如果它的输入和输出与前一次执行时没有发生变化,那么Gradle便会认为该Task是最新的,因此Gradle将不予执行,这就是增量构建的概念。
一个task的inputs和outputs可以是一个或多个文件,可以是文件夹,还可以是project的某个property,甚至可以是某个闭包所定义的条件。自定义task默认每次执行,但通过指定inputs和outputs,可以达到增量构建的效果。
Gradle默认支持传递性依赖,比如当前工程依赖包A,包A依赖包B,那么当前工程会自动依赖包B。同时,Gradle支持排除和关闭依赖性传递。
之前引入远程AAR,一般会这样写:
compile 'com.somepackage:LIBRARY_NAME:1.0.0@aar'
上面的写法会关闭依赖性传递,所以有时候可能就会出问题,为什么呢?本来以为@aar是指定下载的格式,但其实不然,远程仓库文件下载格式应该是由pom文件中决定的,@符号的真正作用是,也就是只下载文件本身,不下载依赖,相当于变相的关闭了依赖传递,可以看一下sf的,通过添加transitive=true可以解决。但其实如果远程仓库有pom文件存在,compile后面根本不需要加"@aar",也就不会遇到这个问题了。
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 如何删除ubuntu系统 的文章

 

随机推荐