当前位置:首页 » 安卓系统 » android编译库

android编译库

发布时间: 2023-08-24 15:20:54

A. 6.2、Android Studio 添加编译依赖

文章摘要
1、 三种依赖类型
2、库依赖关系配置
3、远程仓库
4、查看依赖关系树

英文文献

Android Studio中的摇篮构建系统可以很容易地包括外部的二进制文件或其他库模块到您的构建与依赖。该依赖性可以位于您的计算机上或远程仓库中,他们宣布任何传递依赖将自动包括在内。

要添加一个依赖于你的项目,指定诸如依赖配置compile在dependencies您的块build.gradle文件。

例如,下面build.gradle为应用模块文件包括三种不同类型的依赖关系:

每个这些要求不同类型的依赖关系如下:

此声明一有依赖性 的Android库模块 名为“在MyLibrary”(此名称必须定义为库名称相匹配include你的 settings.gradle 文件)。它需要构建系统编译库模块与应用模块,并在您的APK所产生的AAR文件。

由于Gradle读取相对路径的build.gradle 文件,这告诉构建系统添加您的项目内的所有JAR文件 mole_name/libs/的目录的依赖。
或者,您可以指定单独的文件如下:

这实际上是以下简写:

这宣告了“应用程序魔”库的12.3版本的依赖,在“code.example.android”命名空间组内。

内侧dependencies块,可以声明使用几种不同的一个库依赖依赖关系配置(诸如compile上面示出)。每个相关配置提供了摇篮有关如何使用图书馆不同的指令。下面的列表描述了每个可使用在你的Android项目库依赖的配置。

以上配置适用于项目的主要来源集,它适用于所有的构建变种。
如果你不是想声明的依赖只有特定的 构建变量 源设置或更改一个 测试源设置 ,你必须利用配置名称以及与构建变量或测试源集的名称前缀它。

例如,在添加compile
依赖关系只为您的“免费”产品的风味(使用远程二进制依赖),它看起来像这样:

但是,如果你想添加一个依赖于结合了产品的风味变体和构建类型,那么你必须初始化的配置名称configurations块。下面的示例增加了一个apk依赖于你的“freeDebug”打造变种(使用本地二进制依赖):

要添加compile为本地测试和仪表测试的依赖性,它看起来像这样:

如果你的 库模块提供了多个变种 ,你可以添加不同的库变体像这样不同的应用程序变量:

当你的依赖比当地的图书馆或文件树以外的东西,摇篮会在哪个在线存储库中指定的文件 repositories的块build.gradle文件。

默认情况下,新的Android Studio项目申报JCenter作为该项目的顶级存储库位置build.gradle的文件,如下图所示:

如果你想从Maven的中央仓库的东西,然后再添加 mavenCentral(),或本地存储库使用mavenLocal():

参考配置:

有些直接依赖可能有自己的依赖。这些被称为 传递依赖 。而不是要求您手动声明每个传递依赖,摇篮自动收集,并增加了它们。为了形象化两个项目的直接和传递依赖,对于摇篮的Android插件提供了生成依赖关系树为每个摇篮任务 构建变量 和 测试源集合 。

要生成此报告,步骤如下:

下面的示例报告显示调试构建变量的依赖关系树,包括前面例子中的本地库模块依赖和远程依赖性。

B. Android.mk介绍(一)

linux下,可以通过Makefile来对源码工程进行管理,Android.mk文件是Makefile的一小部分,它用来对Android程序进行编译。Android.mk文件中描述了哪些C文件将被编译且指明了如何编译。Android.mk文件用来告知NDK Build 系统关于Source的信息。

1、编译可执行程序

2、编译动态库或静态库

3、预编译文件(APK或java库)

以上三种是Android.mk的主要用法,我们写mk文件时也就是以上三种目的。


首先看一个最简单的Android.mk的例子:

讲解:

每个Android.mk文件必须以定义 LOCAL_PATH 为开始。它用于在开发tree中查找源文件。

my-dir 由Build System提供。返回包含Android.mk的目录路径。

CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.

例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理 LOCAL_PATH .

这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。

LOCAL_MODULE 模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。

Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so.

但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。

LOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。

不必列出头文件,build System 会自动帮我们找出依赖文件。

缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。

BUILD_SHARED_LIBRARY:是Build System提供的一个变量,指向一个GNU Makefile Script。

它负责收集自从上次调用include $(CLEAR_VARS) 后的所有LOCAL_XXX信息。并决定编译为什么。

BUILD_STATIC_LIBRARY:编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库
BUILD_EXECUTABLE:编译为Native C可执行程序

BUILD_PACKAGE(既可以编apk,也可以编资源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)

BUILD_JAVA_LIBRARY(Java共享库)

BUILD_STATIC_JAVA_LIBRARY(java静态库)


Android源码中有大量的mk文件,Android系统的编译就是靠着这些mk文件的,所以学好是非常有必要的哦!

C. android 编译好的ndk库应该放在哪个目录

可以使用的。 解析:首先Android就是Linux内核。 android应用程序开发环境: 包括eclipse、java、 android sdk、 adt等。 安装android-ndk开发包,这个开发包可以在google android 官网下载: 通过这个开发包的工具才能将android jni 的C/C++的代码编译成库 android的NDK开发需要在linux下进行: 因为需要把C/C++编写的代码生成能在arm上运行的.so文件,这就需要用到交叉编译环境,而交叉编译需要在linux系统下才能完成。 备注:NDK编译步骤: 1.选择 ndk 自带的例子 hello-jni ,位于E:\android-ndk-r5\samples\hello-jni( 根据具体的安装位置而定 ) 。 2.运行 cygwin ,输入命令 cd /cygdrive/e/android-ndk-r5/samples/hello-jni ,进入到 E:\android-ndk-r5\samples\hello-jni 目录。 3.输入 $NDK/ndk-build ,执行成功后,它会自动生成一个 libs 目录,把编译生成的 .so 文件放在里面。 ($NDK是调用我们之前配置好的环境变量, ndk-build 是调用 ndk 的编译程序 ) 4.此时去 hello-jni 的 libs 目录下看有没有生成的 .so 文件,如果有,ndk 就运行正常了。

D. 如何在Android设备中用NDK编译SQLite并且对SQLite进行操作

SQLite是轻量级嵌入式数据库引擎,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLiteSQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎

(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。

1. Android 集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。

2. 数据库存储在 data/< 项目文件夹 >/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。

3. Android 提供了 SQLiteOpenHelper 创建一个数据库,只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。

4. SQLiteOpenHelper 的子类,至少需要实现三个方法:


  1. 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。

2.onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。


3.onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样就可以清楚如何把一个数据库从旧的模型转变到新的模型。

E. Android NDK编译如何强制使用libc++.a的静态链接库

在编译命令行中,将使用的静态库文件放在源文件后面就可以了。比如: gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop 其中-L/usr/lib指定库文件的查找路径,编译器默认在当前目录下先查找指定的库文件。

F. 请教如何在android 系统下交叉编译curl库

你怎么编译的, cocos2dx的android.mk不能直接编译, 要编译主工程时包含编译. 可以参考tests\proj.android\build_native.sh文件, 把里面的几个环境变量还成你自己的路径再运行即可. 你的主工程的jni目录下的android.mk和application.mk也要参考tests\proj.android\jni里面的对应文件, 主要就是加入cocos2d-x几个工程的依赖.

G. Android常见的预编译(prebuilt)

android常用的预编译方法(prebuilt)

1.framework引入静态jar包

2.编译共享jar包

3.编译so库
方法1 : 单独编译

方法2 : 轮询编译

4.预编译apk
预置apk至系统,如果apk含有so库的话,也需要提前编译到系统中,解压apk文件,将so提取出来放置某一文件夹中,通过LOCAL_PREBUILT_JNI_LIBS将so编译至system/app/package/lib/arm目录

H. 怎么重新编译android 下面的动态库

使用动态库来编译动态库

A项目的android.mk文件如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := testa
LOCAL_SRC_FILES := testa.c
include $(BUILD_SHARED_LIBRARY)

生成的libtesta.so加入到E:\workspace\android-ndk-r8e\platforms\android-8\arch-arm\usr\lib\下面

项目B的文件目录结构如下:
jni
jni/jni/
jni/prebuilt/
jni目录下的mk文件如下:
include $(all-subdir-makefiles)

jni/prebuilt目录下的mk文件如下:
LOCAL_PATH := $(call my-dir)

#include $(CLEAR_VARS)
LOCAL_MODULE := libtesta
LOCAL_SRC_FILES := libtesta.so
include $(PREBUILT_SHARED_LIBRARY)

同时把libtesta.so也放入该目录下.

jni/jni目录下的mk文件内容:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS := -ltesta

LOCAL_MODULE := testb
LOCAL_SRC_FILES := testb.c

include $(BUILD_SHARED_LIBRARY)

这样生成libtestb.so文件, 同时eclipse在打包时会把libtesta.so, libtestb.so都加入到apk文件中,如果没有prebuilt那一步,那么在打包时会漏掉libtesta.so, 但编译会通过,因为编译读取的是编译系统的库文件目录(LOCAL_LDLIBS := -ltesta), 这点需要注意
java代码:
System.loadLibrary("testa");

System.loadLibrary("testb");

注意先后关系

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:432
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:536
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:232
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:532
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726