在源代码中(通过Android.mk)编译项目时,如何将*.so库编译进apk包

jlense 2009-11-23 11:07:27
用Eclipse编译工程,若工程下有libs目录,会自动将里面的*.so库编译到apk包中。我现在需要用到*.so库和Android.mk文件编译工程,但用Eclipse编译时,Android.mk不起作用。

Android.mk好像只有在通过源代码编译工程时才起作用(我目前只发现这个办法),即在Linux环境下的Android源代码目录中,通过make或mmm命令编译。但通过mmm编译的工程,不会把工程下libs目前中的*.so库添加进apk包里,是不是要在Android.mk文件中添加一些申明什么的?

还有,想知道Android源代码中,重启手机的相关代码在哪个部分。

有了解的朋友请支个招啊!谢谢!
...全文
8309 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
learn_xu2011 2012-02-06
  • 打赏
  • 举报
回复
也存在这样的问题 求教
xqhrs232 2011-11-21
  • 打赏
  • 举报
回复
也存在这样的问题
ibrothergang 2011-06-28
  • 打赏
  • 举报
回复
mark
zly1986a 2010-11-03
  • 打赏
  • 举报
回复
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_CPP_EXTENSION := .cpp
LOCAL_MODULE := 动态库名
LOCAL_SRC_FILES := C++文件名

LOCAL_CPPFLAGS := -I$(LOCAL_PATH)/../../../Android/Include -I$(LOCAL_PATH)/../../../Android/Include/Embedded -I$(LOCAL_PATH)/../../../Android/LibShare/stlport/stlport

LOCAL_LDLIBS := -ldl -lz

LOCAL_STATIC_LIBRARIES := 静态包名
include $(BUILD_SHARED_LIBRARY)
cookjiang 2010-10-14
  • 打赏
  • 举报
回复
标记,好帖阿
guopeixin 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 guopeixin 的回复:]

引用 9 楼 kofihust 的回复:

给你看个我写的调用静态库和动态库的例子,是可以把所需要的库打进apk里的,以下为Android.mk中的一段
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libcutils \
libutils

LOCAL_STATIC_LIBRARIES :……
[/Quote]
这不是要生成.a的配置么
guopeixin 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kofihust 的回复:]

给你看个我写的调用静态库和动态库的例子,是可以把所需要的库打进apk里的,以下为Android.mk中的一段
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libcutils \
libutils

LOCAL_STATIC_LIBRARIES := \
libfreetype \
lib……
[/Quote]
include $(BUILD_SHARED_LIBRARY)不行吧
tongyu75 2010-03-29
  • 打赏
  • 举报
回复
学习中
G_B 2010-03-26
  • 打赏
  • 举报
回复
关注学习中
allen0508 2009-12-18
  • 打赏
  • 举报
回复
1
jlense 2009-12-02
  • 打赏
  • 举报
回复
Building a simple APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK
include $(BUILD_PACKAGE)

Building a APK that depends on a static .jar file

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# List of static libraries to include in the package
LOCAL_STATIC_JAVA_LIBRARIES := static-library

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

# Tell it to build an APK
include $(BUILD_PACKAGE)

Building a APK that should be signed with the platform key

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := platform

# Tell it to build an APK
include $(BUILD_PACKAGE)

Building a APK that should be signed with a specific vendor key

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage

LOCAL_CERTIFICATE := vendor/example/certs/app

# Tell it to build an APK
include $(BUILD_PACKAGE)

Adding a prebuilt APK

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Module name should match apk name to be installed.
LOCAL_MODULE := LocalModuleName
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)

Adding a Static Java Library

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)

# Any libraries that this library depends on
LOCAL_JAVA_LIBRARIES := android.test.runner

# The name of the jar file to create
LOCAL_MODULE := sample

# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)

找到点相关资料,现在只试了使用jar库,可以使用。

非常感谢各位!

kofihust 2009-11-26
  • 打赏
  • 举报
回复
是我自己写的,参考android的source code里的例子写的。其实NDK也是一样的,只是做了一些简化而已,但是功能还很少,建议直接在源码下编译,比用NDK复杂不到哪里去。另外yili_xie兄问.mk和apk在source中的目录结构,是这样的:.mk文件当然是在根目录下,因为我是在source code下编译的,apk在myandroid/out/target/product/generic/system/app下,其中myandroid为source code的根目录。
其实多看看源码,很多问题都能找到答案
kinghua_q 2009-11-26
  • 打赏
  • 举报
回复
我也想知道怎么在mm的时候把so打包到apk中!!!!!!!!
yili_xie 2009-11-24
  • 打赏
  • 举报
回复
楼主把NDK里面的doc目录下的overview仔细看一下就非常清楚如何在APK中加.so了,截取一段给你看看:
III. NDK development in practice:
---------------------------------

Here's a very rough overview of how you can develop native code with the
Android NDK:

1/ Run build/host-setup.sh to configure the NDK

2/ Place your native sources under $PROJECT/jni/...

3/ Write $PROJECT/jni/Android.mk to describe your sources
to the NDK build system

4/ Write apps/<myapp>/Application.mk to describe your application
and the native sources it needs to the NDK build system

5/ Build your native code by running "make APP=<myapp>"
in the top-level NDK directory.

你把NDK仔细看看就知道怎么弄了~~
yili_xie 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kofihust 的回复:]
给你看个我写的调用静态库和动态库的例子,是可以把所需要的库打进apk里的,以下为Android.mk中的一段
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libcutils \
libutils

LOCAL_STATIC_LIBRARIES := \
libfreetype \
libt1

# Also need the JNI headers.
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE) \
$(LOCAL_PATH)/include

LOCAL_CFLAGS += -O2

LOCAL_CFLAGS += -DHAVE_CONFIG_H

LOCAL_LDLIBS += -lpthread


LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)
[/Quote]
想知道这个.mk是NDK生成的还是楼上的自己写的啊,请教下这个.mk和apk在source中的目录结构是啥样的呢,谢谢拉
yili_xie 2009-11-24
  • 打赏
  • 举报
回复
上面这个.mk是NDK自己生成的还是楼上的写的啊?
kofihust 2009-11-24
  • 打赏
  • 举报
回复
给你看个我写的调用静态库和动态库的例子,是可以把所需要的库打进apk里的,以下为Android.mk中的一段
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libcutils \
libutils

LOCAL_STATIC_LIBRARIES := \
libfreetype \
libt1

# Also need the JNI headers.
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE) \
$(LOCAL_PATH)/include

LOCAL_CFLAGS += -O2

LOCAL_CFLAGS += -DHAVE_CONFIG_H

LOCAL_LDLIBS += -lpthread


LOCAL_PRELINK_MODULE := false

include $(BUILD_SHARED_LIBRARY)
beyondma 2009-11-23
  • 打赏
  • 举报
回复
2楼的回贴被验证了吗?呵呵
yili_xie 2009-11-23
  • 打赏
  • 举报
回复
好像2有点老了,我记得google 的 platform maillist上面有个人发了个文档是讲加入自己的库的例子的,你可以搜搜看
yili_xie 2009-11-23
  • 打赏
  • 举报
回复
上面的3都是在frame/base目录下
加载更多回复(5)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧