mac如何打开library创建Android library

Android Support Annotation Library使用详解
Android Support Annotation Library使用详解
Support Annotation Library是在Android Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多有用的元注解。用来帮助开发者在编译期间发现可能存在的bug。
Support Annotation Library是在 Support Library19.1版本开始引入的一个全新的函数包,它包含了诸多有用的元注解。用来帮助开发者在编译期间发现可能存在的bug。Support Library本身也使用Annotations Library提供的注解来完善Library的代码质量。
Android的每一个版本都在不断的完善Annotation Library,在Android Support Library22.2版本中,又新增了13种新的Annotation Library注解。Android Support Library发展到25,已经有多个独立的jar,如我们常见的Support-v4,Support-v7…
Annotation Library的使用
如果我们的sdk安装了Android Support Respository,那么我们可以打开工程的Srrucure,选中Module,选中Dependencies选项卡,点击添加按钮,选中Android Library。然后通过gradle可以很容易的把这些注解添加到我们的工程中。
compile 'com.android.support:support-annotations:23.1.1'
Nullness注解
使用@NonNull注解修饰的参数不能为null。在下面的代码例子中,我们有一个取值为null的name变量,它被作为参数传递给sayHello函数,而该函数要求这个参数是非null的String类型:
public class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String name = null;
sayHello(name);
void sayHello(@NonNull String s) {
Toast.makeText(this, "Hello " + s, Toast.LENGTH_LONG).show();
由于代码中参数String s使用@NonNull注解修饰,因此IDE将会以警告的形式提醒我们这个地方有问题。
资源类型注解
我们知道在Android中,资源通常以整型表示,并保存在R.中,这意味着如果资源传的是String类型,则编译就会报错,为了给开发者以提示,Android有了资源类型注解,在最新的版本中,每种资源都对应一种注解。
常见的资源型注解如下:
AnimatorRes
DrawableRes
FractionRes
IntegerRes
InterpolatorRes
PluralsRes
StyleableRes
TransitionRes
类型定义注解
在Android开发中,整型不仅用来代表资源引用值,还可以用来代表枚举,IntDef注解就是用来定义整型的新注解,我们可以用来标记我们自己编写的api,例如:
public class IceCreamFlavourManager {
private int
public static final int VANILLA = 0;
public static final int CHOCOLATE = 1;
public static final int STRAWBERRY = 2;
@IntDef({VANILLA, CHOCOLATE, STRAWBERRY})
public @interface Flavour {
public int getFlavour() {
public void setFlavour(@Flavour int flavour) {
this.flavour =
这时如果我们使用错误的整型值调用IceCreamFlavourManager.setFlavour时,IDE将报错。
当然我们也可以指定整型值作为标志位,也就是说这些整型值可以使用’|’或者’&’进行与或等操作。如果我们把@Flavour定义为如下标志位。
@IntDef(flag = true, value = {VANILLA, CHOCOLATE, STRAWBERRY})
public @interface Flavour {
那么我们可以这么调用。
iceCreamFlavourManager.setFlavour(IceCreamFlavourManager.VANILLA & IceCreamFlavourManager
.CHOCOLATE)
@StringDef用法和@IntDef基本差不多。
在Android中,有很多场景都需要使用权限,无论是Marshmallow之前还是之后的动态权限管理.都需要在manifest中进行声明,如果忘记了,则会导致程序崩溃. 好在有一个注解能辅助我们避免这个问题.使用RequiresPermission注解即可。
@RequiresPermission(Manifest.permission.SET_WALLPAPER)
public void changeWallpaper(Bitmap bitmap) throws IOException {
Color值限定注解
上面部分提到了ColorRes,用来限定颜色资源id,这里我们将使用ColorInt,一个用来限定Color值的注解. 在较早的TextView的setTextColor是这样实现的。
public void setTextColor(int color) {
mTextColor = ColorStateList.valueOf(color);
updateTextColors();
Android开发中经常会涉及到很多线程,如主线程,子线程等操作。我相信大家在使用什么EventBus,消息总线…看的比较多,Android中提供了四个与线程相关的注解。
@UiThread,通常可以等同于主线程,标注方法需要在UIThread执行,比如View类就使用这个注解
@MainThread 主线程,经常启动后创建的第一个线程
@WorkerThread 工作者线程,一般为一些后台的线程,比如AsyncTask里面的doInBackground就是这样的.
@BinderThread 注解方法必须要在BinderThread线程中执行,一般使用较少.
例如大名鼎鼎的AsyncTask。
new AsyncTask&Void, Void, Void&() {
protected Void doInBackground(Void... params) {
return null;
updateViews();
public void updateViews() {
Log.i(LOGTAG, "updateViews ThreadInfo=" + Thread.currentThread());
注意,这种情况下不会出现错误提示。
new Thread(){
public void run() {
super.run();
updateViews();
}.start();
虽然updateViews会在一个新的工作者线程中执行,但是在compile时没有错误提示。因为它的判断依据是,如果updateView的线程注解(这里为@UiThread)和run(没有线程注解)不一致才会错误提示.如果run方法没有线程注解,则不提示。
CallSuper重写函数注解
重写的方法必须要调用super方法。使用这个注解,我们可以强制方法在重写时必须调用父类的方法 比如ApplicationonCreate,onConfigurationChanged等。
在Android编译生成APK的环节,我们通常需要设置minifyEnabled为true实现下面的两个效果
删除没有用的代码
但是出于某一些目的,我们需要不混淆某部分代码或者不删除某处代码,除了配置复杂的Proguard文件之外,我们还可以使用@Keep注解 。
public static int getBitmapWidth(Bitmap bitmap) {
return bitmap.getWidth();
返回值注解
我们开发的时候,有时候需要对返回的值做一些出来,那么久用到了@CheckResult注解,如果一个方法得到了结果,却没有使用这个结果,就会有错误出现,一旦出现这种错误,就说明你没有正确使用该方法。
@CheckResult
public String trim(String s) {
return s.trim();
注解在Android开发中随处可以看到,如ButterKnife,afinal,eventbus等,这些都大大提高了我们的开发效率。
用云栖社区APP,舒服~
【云栖快讯】直播推荐——现在预约2月28日14:00 VPN网关新品发布会直播,即可赢取SSL-VPN网关一个月免费试用,尽享安全、稳定、快捷的企业级服务!先到先得哦!&&
服务底层使用经国家密码管理局检测认证的硬件密码机,通过虚拟化技术,帮助用户满足数据安全方面的...
一种适用于大规模并行批处理作业的分布式云服务。可支持海量作业并发规模,系统自动完成资源管理,...
一款安全易用的管理类服务。您无需花费大量成本来保护密钥的保密性、完整性和可用性,借助密钥管理...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...
2017阿里千余份技术干货大盘点转载自:,原作者
本文主要介绍在android工程中如何将共用代码建成公共包方便其他工程引用、引用后的工程结构分析、library引入方式的优缺点。
我的公共库已开源,可见,包含、、及其他,欢迎star和fork^_^。示例APK地址:
1、java中公共库的创建和引入
熟悉java的朋友都知道在java中可以将公用代码提取出来新建工程,打包成jar包,然后通过外部依赖或是加入其他工程使用。
2、android中公共库的创建和引入
使用android提供的is library功能创建公共库,android adt提供了公共库的创建方法,下面逐一介绍
a. 新建android工程
这一步同一般的android工程创建方法,如下
b. 设置工程属性为library
右击工程-&properties-&Android,将工程设置为是library,如下
c. android公共库的引入方法
右击需要引入library的工程-&properties-&Android,在library中添加之前新建的common,如下
这样我们就成功引入library了,对于引入后的工程结构分析可以参见本文下面第三部分介绍。引入后我们可以正常的引入java类,对于资源可以像在同一个工程中引入即可,因为library的资源被并入了工程中。
PS:如果这个时候工程编译出错,则可能是因为工程和公用library中资源的冲突问题,在后面的分析中我们可以知道引入library后,对于工程的资源会进行合并。比如library中现在含有icon.png的drawable资源,若调用者资源中也含有icon.png则会编译报错,这个时候我们可以将library中的icon资源删除,对于library来说尽量不要放这些drawable资源,我们甚至可以如下图红圈所示删除所有drawable资源文件夹,防止冲突发生。
当然删除icon后同时需要修改相应的引用资源的文件,如这里AndroidManifest.xml中的android:icon
3、引用后的工程结构分析
引入library的工程目录结构如下
从上图三个黄色标记的地方我们可以发现library的资源被并入了工程中,同时生成了两个一样的资源文件R.java。这样做的话,对于工程来说可以方便的调用library中的资源,跟在同一个工程中调用资源无甚区别。
a、library的资源被并入调用者工程中,并且相同资源值被覆盖
library中存在strings.xml内容如下
&version=&1.0&&encoding=&utf-8&&&
&&&&&name=&hello&Hello&World,&AndroidCommon!&&
&&&&&name=&app_name&AndroidCommon&&
调用者同样存在strings.xml,内容如下
Java代码&&
&?xml&version=&1.0&&encoding=&utf-8&?&&&
&resources&&&
&&&&&string&name=&app_name&&TESTPROJECT&/string&&&
&&&&&string&name=&string2&&testString&/string&&&
&/resources&&&
最终R.java中的string我们可以看到同时存在hello、app_name、string2三个变量,即资源被合并。并且app_name的值为TESTPROJECT,即资源值被覆盖。
b. 资源一致性
修改上面红色标记的AndroidCommon_src中的AndroidCommon的内容,会发现library中的内容也会被相应修改
c. 编译一致性
修改library的资源进行编译会发现调用者工程也会同时被编译。&
4.&library引入方式的优缺点
通过library方式成功引入了公用库
a.&提高了代码的复用率减少了开发量
b.&可以使得项目模块化以及更好的扩展
同时对于这种工程方式的引入还是觉得有一些不妥的地方
a. 通过源码引入,而不是通过类似jar包引入,从而对于library的修改导致所有引入该library都需要同时编译过于麻烦
阅读(...) 评论()他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)如何创建Android library_百度知道
如何创建Android library
我有更好的答案
&&nbsp.string.mylibhello);&&&&&&&&&&&&&&&&&Intent&it&=&&public&}}& &&import&nbsp.*.Aimport&android.&&nbsp,并且在工程中使用此library提供的资源;1);&&6;&&gt.setContentView(R.layout.utf-8&;&&nbsp.android. 把main.xml改为&&&nbsp,网上这种资料非常少;&&startActivity(it),大家可以自己google一下。&本文着重介绍如何创建A&&nbsp.I&public&class&&?xml&&5;&&& &nbsp,基本上都是讲创建java工程,然后name=&mylib_app_name&&MyLib&&nbsp?&&&&nbsp. strings.xml修改为&1;&fetched&from&lib!&/string&mylibhello&activity&&&nbsp.TextVimport&net.&&=&(TextView)findViewById(R;new&Intent(this,&MyLib.class);activity&&android.setText(R://www,这种方式缺点非常多;resources&&&&&&string&name=&string&&&nbsp,具体步骤如下:1;tv&nbsp. 在MyProj的AndroidManifest.xml中加入对library中activity的引用&TextView&extends&Activity&{&version=&&nbsp.0&&encoding=&&nbsp.Bimport&android.widget.devdiv.&/**&Called&when&the&{&&&&&&&&super.onCreate(savedInstanceState). 创建一个Android工程,命名为MyLib2.main);&first&created.&*/&&&&@Override&onCreate(Bundle&savedInstanceState)&nbsp. 进入工程设置选中Is Library&3. 创建另一个Android工程,命名为MyProj4. 进入工程设置,添加MyLib&void&is&&MyProj&/string&&/resources&& &7. 在MyProj中引用MyLib的资源package&nbsp:name=&net.devdiv.com/thread-.html" target="_blank">http. 由于编译后library中的资源和引用它的project资源是合并在一起的,为了避免重名问题.mylib.String&&lt.MyLib&&/&gt,需要对library中资源进行重命名&nbsp.mylib);&2).java代码setContentView(R.layout,同时修改MyLimport&nbsp.devdiv.com/thread-.id.myprojtext);&&&&&&&原文出处:<a href="http://www.devdiv创建library供多个工程共享代码、资源是非常常见的需求
采纳率:77%
来自团队:
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。2016年3月 移动开发大版内专家分月排行榜第二
2016年3月 移动开发大版内专家分月排行榜第二
匿名用户不能发表回复!|}

我要回帖

更多关于 sch library 如何打开 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信