【转载】Android Studio jar、so、library项目依赖,原文链接http://zhengxiaopeng.com/2014/12/13/Android-Studio-jar、so、library项目依赖/
前言
Android Studio(以下简称AS)在13年I/O大会后放出预览版到现在放出的正式版1.0(PS.今天又更新到1.0.1了)历时一年多了,虽然Google官方推出的Android开发者的IDE对我们Android DEV是很有吸引力的,但考虑到beta版还是太多问题所以自己主要还是把AS当做尝鲜为主,每放出一个较大更新就下载下来试试,感觉还是挺好的,渐渐用AS的人越来越多,Github上的项目也基本是AS的了,Google的sample也采用AS,所以使用Eclipse跟外界交流越来越困难啊。到现在android-studio-bundle-135.1629389
AS正式版的推出,我们有理由从Eclipse迁移到AS了。
要迁移到AS中开发那么要掌握AS中的项目管理是必须的,基本的new project、run什么的就不提了,这篇文章记录我在AS中在项目中解决jar包、library项目依赖、so动态链接库的问题,版本控制Git、SVN等这篇文章不涉及。这么多废话后下面开始。
Eclipse跟AS的不同
从Eclipse到AS不要带着在Eclipse中的主观色彩去在AS中使用,从项目的构成到构建是不同的,下面列举在Eclipse和AS中的一些概念的区别:
WorkSpace和Project
Eclipse的WorkSpace和AS的Project说的可以说是一个东西,也就是说你可以把在AS中的Project理解为WorkSpace。
所以你在AS中new一个Project相当于在Eclipse中重开了一个WorkSpace,注意第一个箭头,显示模式为Project,建议刚用AS时用这种,方便了解里面的文件结构。
Project和Module
跟上面一样,Eclipse中的一个个project也就是相当于AS中的一个个module。上图的module_1和module_2就是我们习惯的eclipse中的一堆project了,把显示模式换为Android之后就更为直观了:
最下面的就是AS
中整个Project中所有Gradle的配置了,当然包括所有module的配置了,括号的名字就表示build.gradle对应的配置对象。
Properties和Module Setting
Eclipse中的Properties也是跟AS的Module Setting对应的
可以看到这里可以像在Eclipse的Properties中一样在这里配置一些东西,比如在Module Setting里给Module添加依赖(dependencies)信息也是可以的,并且可以直接搜maven的项目依赖。
jar
明白了上面的三点就可以很快上手了。首先就来说最简单的添加jar包。
- 可以跟在Eclipse中一样,把jar包往
Module
里扔,再在jar右键add as library就可以了,然后最后在你的Module文件夹(像上面的module_1)右键make module一下就可以在代码里用jar里的东西了。 - 也可以自己手动到module里的build.gradle里添加dependencies,上面的方法做的方法本质上就是这种。
1
2
3
4
|
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(dir: 'D:\\repositories\\libs\\java', include: ['*.jar'])
}
|
dir可以是电脑上的目录文件。
library项目
有了前面跟Eclipse的比较后,类似地像在Eclipse中添加项目依赖一样,被依赖的项目得是作为library。在Eclipse中我们是进入到Properties把这个项目设置为library(as a library),所以在AS中也是类似的,我们需要把一个module作为library(这个module可以自己新建module也可以导入module,此外我们是可以把一个AS的Project导进成module的或者直接导Project里的单个module也可以),完成后到这个module(我这里是把module_2作为library)把apply plugin: 'com.android.application'
改为apply plugin: 'com.android.library'
再然后去掉(删除)module_2的build.gradle里的applicationId "com.example.mrzheng.as"
(一个library不需要这个,不然make project或make module时会报错)。
build.gradle(module_2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
apply plugin: 'com.android.library'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 10
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:21.0.2'
}
|
到这里先确认下你的project(AS)的settings.gradle里有没把module都include进去,没有的话加上:
1
|
include ':module_1', ':module_2'
|
最后就可以在module_1里就添加library依赖(module_2)了。进入module_1的build.gradle,找到dependencies加上compile project(':module_2')
build.gradle(module_1)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.example.mrzheng.as"
minSdkVersion 10
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile fileTree(dir: 'D:\\repositories\\libs\\java', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.2'
compile project(':module_2')
}
|
现在make module一下就可以使用依赖的项目了(module_2)。
so
之前的版本不知道怎么样,现在正式版的AS添加so打包进apk里的lib里是很简单的,我们只需要把so文件放到libs文件夹里的对应cpu文件夹里,最后在module的build.gradle里加上jni的sourceSets配置:jniLibs.srcDirs = ['libs']
,完整代码看上面的build.gradle(module_1)代码片。
END
做完上面的工作,jar包、so动态链接库、library依赖项目里的代码就都可以正常工作了,正常的项目开发已经没什么问题。最后给上本博文的源码:Android Studio jar、so、library项目依赖,导进AS里后,run module_1即可。
最最后奉上Android Studio快捷键大全(大部分来源于:http://ask.android-studio.org/?/article/12):
附录(IDEA(Android Studio) 快捷键)
说明:斜体文字表示,测试时没有效果或者没有测试时没有达到预先条件的情况下没有效果。
IDE
按键 | 说明 |
---|---|
F1 | 帮助 |
Alt+F1 | 查找文件所在目录位置 |
Alt+1 | 快速打开或隐藏工程面板 |
Ctrl+Alt+S | 打开设置对话框 |
Alt+Home | 跳转到导航栏 |
Esc | 光标返回编辑框 |
Shift+Esc | 光标返回编辑框,关闭无用的窗口 |
Shift+Click | 关闭标签页 |
F12 | 把焦点从编辑器移到最近使用的工具窗口 |
Ctrl+Alt+Y | 同步 |
Ctrl+Alt+S | 打开设置对话框 |
Alt+Shift+Inert | 开启/关闭列选择模式 |
Ctrl+Alt+Shift+S | 打开当前项目/模块属性 |
Alt+Shift+C | 查看文件的变更历史 |
Ctrl+Shift+F10 | 运行 |
Ctrl+Shift+F9 | debug运行 |
Ctrl+Alt+F12 | 资源管理器打开文件夹 |
编辑
按键 | 说明 |
---|---|
Ctrl+C | 复制当前行或选中的内容 |
Ctrl+D | 粘贴当前行或选中的内容 |
Ctrl+X | 剪切当前行或选中的内容 |
Ctrl+Y | 删除行 |
Ctrl+Z | 倒退 |
Ctrl+Shift+Z | 向前 |
Alt+Enter | 自动修正 |
Ctrl+Alt+L | 格式化代码 |
Ctrl+Alt+I | 将选中的代码进行自动缩进编排 |
Ctrl+Alt+O | 优化导入的类和包 |
Alt+Insert | 得到一些Intention Action,可以生成构造器、Getter、Setter、将 == 改为 equals() 等 |
Ctrl+Shift+V | 选最近使用的剪贴板内容并插入 |
Ctrl+Alt+Shift+V | 简单粘贴 |
Ctrl+Shift+Insert | 选最近使用的剪贴板内容并插入(同Ctrl+Shift+V) |
Ctrl+Enter | 在当前行的上面插入新行,并移动光标到新行(此功能光标在行首时有效) |
Shift+Enter | 在当前行的下面插入新行,并移动光标到新行 |
Ctrl+J | 自动代码 |
Ctrl+Alt+T | 把选中的代码放在 try{} 、if{} 、 else{} 里 |
Shift+Alt+Insert | 竖编辑模式 |
Ctrl+ / |
注释 // |
Ctrl+Shift+ / |
注释 /*...*/ |
Ctrl+Shift+J | 合并成一行 |
F2/Shift+F2 | 跳转到下/上一个错误语句处 |
Ctrl+Shift+Back | 跳转到上次编辑的地方 |
Ctrl+Alt+Space | 类名自动完成 |
Shift+Alt+Up/Down | 内容向上/下移动 |
Ctrl+Shift+Up/Down | 语句向上/下移动 |
Ctrl+Shift+U | 大小写切换 |
Tab | 代码标签输入完成后,按 Tab ,生成代码 |
Ctrl+Backspace | 按单词删除 |
Ctrl+Shift+Enter | 语句完成 |
Ctrl+Alt+J | 用动态模板环绕 |
文件
按键 | 说明 |
---|---|
Ctrl+F12 | 显示当前文件的结构 |
Ctrl+H | 显示类继承结构图 |
Ctrl+Q | 显示注释文档 |
Ctrl+P | 方法参数提示 |
Ctrl+U | 打开当前类的父类或者实现的接口 |
Alt+Left/Right | 切换代码视图 |
Ctrl+Alt+Left/Right | 返回上次编辑的位置 |
Alt+Up/Down | 在方法间快速移动定位 |
Ctrl+B | 快速打开光标处的类或方法 |
Ctrl+W | 选中代码,连续按会有其他效果 |
Ctrl+Shift+W | 取消选择光标所在词 |
Ctrl+ - / + |
折叠/展开代码 |
Ctrl+Shift+ - / + |
折叠/展开全部代码 |
Ctrl+Shift+. |
折叠/展开当前花括号中的代码 |
Ctrl+ ] / [ |
跳转到代码块结束/开始处 |
F2 或 Shift+F2 | 高亮错误或警告快速定位 |
Ctrl+Shift+C | 复制路径 |
Ctrl+Alt+Shift+C | 复制引用,必须选择类名 |
Alt+Up/Down | 在方法间快速移动定位 |
Shift+F1 | 要打开编辑器光标字符处使用的类或者方法 Java 文档的浏览器 |
Ctrl+G | 定位行 |
查找
按键 | 说明 |
---|---|
Ctrl+F | 在当前窗口查找文本 |
Ctrl+Shift+F | 在指定环境下查找文本 |
F3 | 向下查找关键字出现位置 |
Shift+F3 | 向上一个关键字出现位置 |
Ctrl+R | 在当前窗口替换文本 |
Ctrl+Shift+R | 在指定窗口替换文本 |
Ctrl+N | 查找类 |
Ctrl+Shift+N | 查找文件 |
Ctrl+Shift+Alt+N | 查找项目中的方法或变量 |
Ctrl+B | 查找变量的来源 |
Ctrl+Alt+B | 快速打开光标处的类或方法 |
Ctrl+Shift+B | 跳转到类或方法实现处 |
Ctrl+E | 最近打开的文件 |
Alt+F3 | 快速查找,效果和Ctrl+F相同 |
F4 | 跳转至定义变量的位置 |
Alt+F7 | 查询当前元素在工程中的引用 |
Ctrl+F7 | 查询当前元素在当前文件中的引用,然后按 F3 可以选择 |
Ctrl+Alt+F7 | 选中查询当前元素在工程中的引用 |
Ctrl+Shift+F7 | 高亮显示匹配的字符,按 Esc 高亮消失 |
Ctrl+Alt+F7 | 查找某个方法的所有调用地方 |
Ctrl+Shift+Alt+N | 查找类中的方法或变量 |
Ctrl+F12 | 查找类中的方法 |
Ctrl+Shift+O | 弹出显示查找内容 |
Ctrl+Alt+Up/Down | 快速跳转搜索结果 |
Ctrl+Shift+S | 高级搜索、搜索结构 |
重构
按键 | 说明 |
---|---|
F5 | 复制 |
F6 | 移动 |
Alt+Delete | 安全删除 |
Ctrl+U | 转到父类 |
Ctrl+O | 重写父类的方法 |
Ctrl+I | 实现方法 |
Ctrl+Alt+N | 内联 |
Ctrl+Alt+Shift+T | 弹出重构菜单 |
Shift+F6 | 重构-重命名 |
Ctrl+Alt+M | 提取代码组成方法 |
Ctrl+Alt+C | 将变量更改为常量 |
Ctrl+Alt+V | 定义变量引用当前对象或者方法的返回值 |
Ctrl+Alt+F | 将局部变量更改为类的成员变量 |
Ctrl+Alt+P | 将变量更改为方法的参数 |
调试
按键 | 说明 |
---|---|
F8 | 跳到下一步 |
Shift+F8 | 跳出函数、跳到下一个断点 |
Alt+Shift+F8 | 强制跳出函数 |
F7 | 进入代码 |
Shift+F7 | 智能进入代码 |
Alt+Shift+F7 | 强制进入代码 |
Alt+F9 | 运行至光标处 |
Ctrl+Alt+F9 | 强制运行至光标处 |
Ctrl+F2 | 停止运行 |
Alt+F8 | 计算变量值 |
VCS
按键 | 说明 |
---|---|
Alt+ ~ |
VCS 操作菜单 |
Ctrl+K | 提交更改 |
Ctrl+T | 更新项目 |
Ctrl+Alt+Shift+D | 显示变化 |
其它
按键 | 说明 |
---|---|
(Ctrl+)F11 | 标记书签 |
Shift+F11 | 显示书签 |
【转载】Android Studio jar、so、library项目依赖,原文链接http://zhengxiaopeng.com/2014/12/13/Android-Studio-jar、so、library项目依赖/的更多相关文章
- Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库
一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- Linux Android 多点触摸协议 原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/os/71/12306571.shtml
为了使用功能强大的多点触控设备,就需要一种方案去上报用户层所需的详细的手指触摸数据.这个文档所描述的多点触控协议可以让内核驱动程序向用户层上报任意多指的数据信息. 使用说明 单点触摸信息是以ABS承载 ...
- linux下查看动态链接库依赖关系的命令 x86: ldd *.so arm: arm-linux-readelf -d *.so 实际例子: 以项目中用到的库librtsp.so分析: lijun@ubuntu:~/workspace$ arm-hisiv100nptl-linux-ld -d librtsp.so arm-hisiv100nptl-linux-ld:
linux下查看动态链接库依赖关系的命令 x86:ldd *.so arm:arm-linux-readelf -d *.so 实际例子:以项目中用到的库librtsp.so分析:l ...
- Android零基础入门第11节:简单几步带你飞,运行Android Studio工程
原文:Android零基础入门第11节:简单几步带你飞,运行Android Studio工程 之前讲过Eclipse环境下的Android虚拟设备的创建和使用,现在既然升级了Android Studi ...
- “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX
"快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...
- Archive for required library: 'E:/repository/org/apache/ant/ant/1.7.1/ant-1.7.1.jar' in project 'test02' cannot be read or is not a valid ZIP file
Archive for required library: 'E:/repository/org/apache/ant/ant/1.7.1/ant-1.7.1.jar' in project 'tes ...
- 【spring cloud】spring cloud打包最外层项目报错:'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging. @ line 9, column 13
OK,spring cloud项目,最外层的父级项目在打包的时候,报错如下: "C:\Program Files\Java\jdk1.8.0_131\bin\java" -Dmav ...
- Gradle依赖项学习总结,dependencies、transitive、force、exclude的使用与依赖冲突解决
http://www.paincker.com/gradle-dependencies https://docs.gradle.org/current/userguide/dependency_man ...
随机推荐
- jQuery简单前端表单验证
<!DOCTYPE html> <html> <head> <title>表单验证</title> <script src=" ...
- SilverLight搭建WCF聊天室详细过程
收藏SL双工通信例子教程 SilverLight 4正式版发布给开发人员带来了更多功能,并且4已经支持NET.TCP协议,配合WCF开发高效率的交互应用程序已经不再是难事,本系列文章主要针对已经完成的 ...
- 诞生于饭桌上的jcSQL语言
相信每个Coder都有心在自己求学阶段可以写一门自己的语言,无论是毕业设计,还是课余爱好:不管是为了提升B格,还是想练手,抑或对其他语言不满,想自己撸一个,只要坚持下去了,都是不错的理由. 现在正值暑 ...
- 如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程
对于经常鼓捣电脑的童鞋来说,装系统是一件极其平常的事情,不过系统装多了之后,我们会感到比较烦躁,因为每一次装系统意味着驱动的重新安装,程序的重新安装,每次这么鼓捣几次,半天时间就花在这上面了,效率是在 ...
- powerdesigner for sqlserver的一些实用配置
在实用powerdesigner生成sqlserver 数据表时常常遇到一些问题: 1.数据中定义的字段名称相同生成物理模型时会报错. 2.数据各表之间的主键不能定义一样的名称. 我现在的需求是将数据 ...
- 理解session机制
理解session机制 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息. 当程序需要为某个客户端的请求创建一个session的时候,服务器首 ...
- iOS定位功能
1.实现定位功能需要导入系统库MapKit.framework 2.在iPhone手机上默认是禁止手机定位的,所以,要询问系统是否开启手机定位功能. 为了开启手机定位功能,还需在info.plist中 ...
- Swift学习之十四:闭包(Closures)
* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas ...
- html基础标签-1-pre预格式标签
pre预格式标签 code,tt标签 1 <!doctype html> 2 <html lang='zh-cn'> 3 <head> 4 <meta cha ...
- 在查询用户的权限的时候 使用左外连接 和 access数据库中左外连接
一般做视图最好是做成左外连接的.而其作用尤其在我们查询用户当前的权限时尤为明显,我们将 权限表即模块表放→角色权限表→角色表→用户角色表→用户表 就这样left outer join 连接起来,这样就 ...