- 浏览: 1031449 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (675)
- ios (214)
- android-course (5)
- unity3d (7)
- cocos2d (36)
- html5 (3)
- game (5)
- android (42)
- java (57)
- php (12)
- 创业 (10)
- SEO (3)
- 架构 (2)
- 数据库 (3)
- 产品设计 (9)
- 操作系统 (10)
- Web前端 (11)
- 其他 (50)
- GAE (1)
- mac os (8)
- Open Source (2)
- 序列号 (10)
- C (2)
- database (2)
- 算法 (6)
- 设计模式 (1)
- photoshop (1)
- 3dmax (1)
- maya (1)
- opengl (3)
- 游戏设计 (1)
- 趋势 (1)
- cocos2d-x (4)
- shell (3)
- c++ (30)
- lua (5)
- flash (1)
- spring (3)
- mysql (4)
- Git (6)
- xmpp (1)
- cocos2dx (14)
- mac (2)
- 编程规范 (2)
- windows (1)
- linux (5)
- coocs2dx (1)
- ubuntu (2)
- aws (1)
- OPENGLES (1)
- 原画 (1)
最新评论
-
jlees:
Best mobile app testing tool pc ...
iOS + XCode 4 + GHUnit = Mobile TDD+Continuous testing -
ipanda:
楼主,能否给一个Micro CloudFoundry的虚机或者 ...
Cloud Foundry使用及开发向导 -
love_zongming:
谢谢分享。。
visio2007序列号 -
雨花台舞水:
你这才是枪文把
套在 360 黑匣子外面的黑盒子:你被技术型枪稿吓到了么? -
hugh.wang:
改天试试
Mac版魔兽争霸3 1.24e下载
一、何谓Library Project:
关于Library Project的官方详细解释可以参考这里,对英语不感冒的同学,可以参考我的简单解释:如果有一部分代码被多个工程共享了,那么这个时候把它做成库来加载,是最好的选择。在Java中,我们一般采用Jar包的形式提供库文件,但是在Android开发中,官方并不赞成打包为Jar包的方式,虽然在网上可以搜到一些“旁门左道”把资源打包成Jar包。而个人感觉Library Project的一个最大缺点就是库工程文件是展开的,这样工程文件“可以修改而不是只读”。
*说明:本文中的操作均利用Eclipse with ADT实现的。
二、如何创建Library Project:
Library Project和Standard Project的创建方式是一样——均是新建一个Android Project。
在创建工程的时候,要注意,如果库工程中有 <activity>、 <service>、<receiver>或者 <provider>等,在用户工程的manifest.xml文件中均需要有专门的声明,详见官方说明。
工程创建完毕以后,打开工程的属性配置,并选择到Android一项中,勾选“is library”:
然后,再创建(或者选中已有的)一个用户工程,同样选择工程属性,然后在Library面板中添加刚才的库工程:
整个添加过程就结束了。这里有一个疑难杂症提醒一下大家:如果在你完成了上诉步骤以后,发现在用户工程中仍然无法正常索引库工程的内容,Eclipse的自动补全系统也不能帮你添加import,甚至你手动添加了import都还是不能识别,那么,尝试重启一下你的Eclipse吧。
三、针对 Library Project的一些讨论:
1. 库文件需要Activity么?
从功能上讲,Android官方为大家提供了为库工程添加一切类型的可能性,然而这并不意味着我们就一定要这么做。
例如在我这次写的工程中,库工程的主要作用就是提供一个LinearLayout对象,里面躺着我的签名板。于是我有两个选择:1、提供一个LinearLayout对象;2、提供一个Activity对象。
通常情况下,我们会发现,采用前一种方法会令库工程更加灵活,因为如果提供一个Activity,就意味着我们必须提供它一些修饰信息:是否全屏,大小,配色以及Intent的读取和写入。这些都是与用户工程息息相关的,而对于签名板来说,则是多余的。
然而,如果我们提供的功能是类似于“弹出警告框”,那么或许提供一个直接的Activity会比较方便,虽然在配色方面极有可能与用户工程格格不入,但是作为一个简单的弹出框,它的影响是有限的。(想想平时我们用的各种绚丽的桌面应用,它们的报错框往往采用的是window默认提供的样式。)
2、如何让界面大小更加灵活(上)?
在我提供的例子中,需要为WhiteBoard的构造函数提供签名板的长宽。这个细节值得大家注意,它也消耗了我很多时间来研究相关的函数和逻辑。
首先,我们能想到的,这两个长宽的提供一定与承载它的界面大小相关,所以我们需要读取父控件的长宽:
final LinearLayout layout = (LinearLayout) this.findViewById(R.id.lv_main);
int width = layout.getWidth();
然而如果getWidth这个函数是在Activity的onResume方法执行完之前调用,得到的仅可能是“0”。一个简单的解决方案就是将getWidth方法搬到其他地方读取——等onResume方法执行完毕以后再调用。否则就只有是读取窗口的大小了——关于在加载初期获取界面大小的方法暂时没有找到。
另外,在获取了父控件的大小以后,下一步需要考虑的就是这个值会不会太小了。这个问题看似简单,解决起来却非常繁琐,就像许多网页开发者常常忘记考虑用户浏览器窗口可能处于任何大小的情况。一个最简单的办法,就是考虑一个“最小长宽”的设计,如果窗口过小,就隐藏部分生成的信息。这点请参考我的WhiteBoard类下的calcHeightOfTopBorder方法。
3、如何让界面大小更加灵活(下)?
接刚才所述,现在介绍calcHeightOfTopBorder方法中的一些技术。
在这个方法中,我的目的是读取图标的大小,并把他最为“最小长宽”的重要参考。正如一开始所讨论的,我们无法在界面加在好之前读取界面长宽,因此我们无法直接读取使用了图标的ImageView控件的大小。于是,我们直接去读取图标的大小。加载图标的办法可以参考官方对BitmapFactory类的介绍,这里我们要与大家分享的则是一个技巧:那就是在我们加载图标的时候,如果提供了一个BitmapFactory.Options,并将其中的属性“inJustDecodeBounds”设置为True,则实际上BitmapFactory类不会真正加载图片,而仅仅是读取长宽保存在BitmapFactory.Options的outWidth和outHeight变量中。这样,我们就节省了很大的内存空间:
BitmapFactory.decodeResource(this.context.getResources(), R.drawable.whiteboard_cancel, tempImage);
maxheight = maxheight > tempImage.outHeight ? maxheight : tempImage.outHeight;
转载自:http://www.mielf.net/featherelf/simple-android-library-project
发表评论
-
Android监听键盘是否弹出,以及获取软键盘的高度
2015-07-02 19:31 1493网上介绍过监听键盘是否弹出的方法,我自己也是尝试过,不是 ... -
linux安装android NDK
2015-04-20 19:14 1905Error:Execution failed for ta ... -
android studio 添加项目修改gradle2.2.3
2015-04-20 15:22 16041.build.gradle(Module:app) 去除对 ... -
Android.mk无需手动添加cpp文件(cocos2d-x 3.2正式版)
2014-09-11 14:41 1026LOCAL_PATH := $(call my-dir) ... -
cocos2dx 在android中编译
2014-08-08 17:11 8661在全局环境变量中设置NDK_ROOT -
android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据
2014-08-07 16:54 2564为了实现这个功能可折腾了我好久,先上一份代码,经楼主验证是绝 ... -
用Gradle 构建你的android程序
2014-03-21 17:15 836前言 android gradle 的插 ... -
Hackborn的吐槽和Munn的剖析: Android graphics低性能背后的真像
2013-10-23 14:52 796Google+上有意思的讨论 ... -
mac 不识别 android samsung手机
2013-10-21 16:30 1890使用Mac开发Android时,有可能无法识别手机,可以通过 ... -
Mac下配置Android NDK环境并搭建Cocos2d-x环境并Eclipse正常编译运行Cocos2dX自带TestsDemo项目!
2013-04-04 00:58 1224大家都知道Cocos2d-X是个多平台支持的游戏引擎,那么 ... -
让Java跟Javascript更加亲密
2013-04-02 22:30 1147在移动App开发中,为了快速迭代,通常都会使用Native+ ... -
技术文章收藏夹
2013-02-13 19:59 819COCOS2D-X跨ANDROID&IOS平台开发入 ... -
eclipse failed to create the java virtual machine 问题图文解析
2013-01-27 11:16 689解决方法: 1.问题现象 2.java虚拟机初始化失败 ... -
cocosd-android原来是个山寨货
2012-06-13 09:25 9791、技术团队无优势:Cocos2D-Android版本与iPh ... -
How Secure Are Query Strings Over HTTPS?
2012-03-09 12:29 1269A common question we hear is ... -
Android禁止横屏竖屏切换
2012-04-20 00:13 1702在AndroidManifest.xml的activity(需 ... -
Facebook还发布了Ringmark手机浏览器测试套件
2012-02-28 09:17 1101Facebook还发布了Ringmark手机浏览器测试套件 -
图解 Android 广播机制
2012-02-16 16:35 918从现实生活中理解广播机制 一听到广播我们第一感觉就会联 ... -
Handling Android 2.3 WebView's broken AddJavascriptInterface
2012-02-12 15:05 1461The Google Android team rele ... -
Error executing aapt解决
2012-02-11 23:31 4562安装完SDK和ADT时貌似出现些问题。 Description ...
相关推荐
本文将详细介绍如何在Windows环境下使用Android Studio进行NDK开发,创建并运行你的第一个NDK示例项目——FirstNdkDemo。 一、Android NDK介绍 NDK(Native Development Kit)是Google提供的一个工具集,它允许...
在Android Studio中,新建一个项目时可以选择“Empty Activity”,然后在build.gradle模块文件中添加对NDK的支持,例如: ```groovy externalNativeBuild { cmake { cppFlags "" abiFilters 'armeabi-v7a', 'arm...
这个"android电子书例子程序"旨在为开发者提供一个起点,帮助他们理解和实现自己的电子书应用。本文将深入探讨这个示例程序可能包含的关键知识点,以及如何利用这些知识进行实际的开发工作。 首先,Android电子书...
在Android Studio中,我们可以通过新建项目时选择“Library”模板来创建一个库项目。然后,在需要使用该库的主项目中,我们可以在Gradle依赖中声明对库项目的依赖,例如: ```gradle dependencies { ...
在Android中,每个应用都有一个唯一的用户ID(UserID),默认情况下,不同的应用具有不同的 UserID,以保护应用间的数据安全。然而,有时我们希望多个应用能够共享某些权限或数据,例如读写同一个外部存储目录。这时...
Android Beacon Library是一个强大的开源库,专门为Android设备设计,用于检测和交互与iBeacon和Eddystone等不同类型的蓝牙低功耗(BLE)信标。该库提供了一套全面的功能,使开发者能够轻松地集成Beacon技术到他们的...
这是一个文本文件,包含了一系列的指令,CMake会读取这些指令来生成构建系统,如Makefile。基本的CMakeLists指令包括: 1. `cmake_minimum_required(VERSION version)`: 定义所需的CMake版本。 2. `project(project...
在某些情况下,当ButterKnife被用在一个库项目(Library Project)中时,编译过程可能会出现错误,因为ButterKnife的注解处理器无法正确地在库项目中运行。这个问题通常与Android Studio的构建配置和注解处理器的...
This project aims to provide a reusable Pull to Refresh widget for Android. It was originally based on Johan Nilsson's library (mainly for graphics, strings and animations), but these have been ...
本教程将通过一个简单的例子来介绍如何使用JNI和NDK进行开发。 首先,我们需要创建一个Android项目,包含一个简单的按钮和一个TextView。按钮的作用是触发JNI函数的调用,而TextView则用来显示JNI函数返回的结果。...
下面将详细讲解Android NDK的基础知识以及如何创建并运行一个简单的"Hello, World!"程序。 首先,NDK的主要用途包括: 1. **性能优化**:对于计算密集型或图形密集型应用,如游戏引擎、音频/视频处理,使用原生...
例如,一个简单的CMakeLists.txt可能如下: ```cmake cmake_minimum_required(VERSION 3.4.1) add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED #...
Freetype是一个流行的开源字体渲染库,广泛用于多种操作系统和设备,包括Android。本篇将详细介绍如何在Android环境中编译Freetype库,生成适用于64位架构的SO(共享对象)库。 首先,理解Freetype库:Freetype是一...
例如,创建一个简单的函数: ```cpp #include #include extern "C" JNIEXPORT jstring JNICALL Java_com_example_ndktest_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string ...
例如,创建一个名为`hello.c`的文件,其中包含C语言的简单函数。 3. **编写构建脚本**:创建`Android.mk`或`CMakeLists.txt`文件来指示Android构建系统如何编译C/C++代码。`Android.mk`是传统的Makefile格式,而`...
在Android开发领域,Android Studio是首选的集成开发环境(IDE),而Gradle则是一个强大的构建工具,用于自动化项目构建过程。本篇文章将详细介绍如何使用Android Studio来开发Gradle插件,以便更好地理解和利用...
在这个例子中,我们有一个`native-lib.cpp`文件。 六、编译和运行 保存所有更改后,Android Studio会自动识别CMake配置并构建原生库。你可以通过点击“Make Project”按钮或使用快捷键(通常是Ctrl+F9)来编译项目...
【标题】"fmxlinux教程例子01源码.zip" 提供的是一个使用Delphi开发的跨平台应用程序示例,特别针对Linux环境。这个压缩包包含了一系列关键的项目文件,让我们来逐一解析其中的文件及其在Delphi开发过程中的作用。 ...
在"ModuleSample"这个压缩包中,我们可以期待找到一个关于Android模块化开发的示例代码,它可能包含了不同类型的模块以及它们如何相互协作的例子。这个示例可以帮助开发者更好地理解和实践Android的模块化开发。
也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...