重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 1145|回复: 1
打印 上一主题 下一主题

芯灵思开发板安卓底層开发学习经驗第七期

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-13 16:30:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这一期我们继续探索Android.mk,主要讲的是如何编译jar包,如何首先我们需要配置我们的环境变量.build/envsetup.sh,然后Touchpankage/apps/Calculator/src/com[size=10.5000pt](1)静态jar包:include$(B[size=10.5000pt](2)动态jar包:include$(B可以看到是在23行出的错,所以当我们的USED_SHARE=true的话




这一期我們繼续探索Android.mk ,主要讲的是如何编译jar包,如何编译APK,APK中如何导入jar包和库文件,如何在Android.mk中添加判斷语句
首先我们看一下如何编譯生成APK,
下面我们来看一下编译生成APK的主要程序代码:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := LocalPackage
include $(BUILD_PACKAGE)
BUILD_PACKAGE :編译生成apk
LOCAL_PACKAGE_NAME :编译生成apk的名字
下面我来给大家演示一個如何生成apk的小例子:
首先我們需要配置我们的环境变量. build/envsetup.sh , 然后选择我们的lunch,我们来那我们的原生系统應用来举个例子,我们來看一下pankage/apps/下都有哪些原生应用           ls  pankage/apps/  然后我们来看一下这个Calculator的代码
vi pankage/apps/Calculator/Android.mk

   


LOCAL_SRC_FILES就是調用我们当前目录下的所有java的文件
LOCAL_SDK_VERSION指定的是我们当前SDK的版本
下面我们来編译一下这个文件,首先我们需要更新一下我们的原文件下的任何一个文件
Touch pankage/apps/Calculator/src/com/android/calculator2/Calculator.java
然后我们来编译我们的app ,   mmm pankage/apps/Calculator/

   



   
在编译過程中共生成了两个apk文件,这就是如何生成apk文件
下面我們來看一下如何编译生成jar包
首先我们看一下生成jar包需要的代码:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL MODULE := com.test.myjar
include $(BUILD_STATIC_JAVA_LIBRARY)
include $(BUILD_JAVA_LIBRARY)
include $(BUILD_STATIC_JAVA_LIBRARY) : 编譯生成静态jar包
include $(BUILD_JAVA_LIBRARY) : 編译生成共享jar包
我們來看一下jar包的分类:
[size=10.5000pt](1)靜態jar包:include $(BUILD_STATIC_JAVA_LIBRARY) 使用.class文件打包而成的JAR文件,可以在任何java虛拟机运行
[size=10.5000pt](2)動态jar包:include $(BUILD_JAVA_LIBRARY)  在静态jar包基礎之上使用.dex打包而成的jar文件,.dex是Android系统使用的文件格式,只能在Android上使用
我们来看一下如何在apk中引用我们的jar包;
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := statia-library   (静态jaeger包)
LOCAL_JAVA_LIBRARIES := share-library     (动态jar包)
LOCAL_SRC_FILES :=$(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := LocalPackage
include $(BUILD_PACKAGE)
预編译jar包:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_CLASS := JAVA_LIBRARIES
LOCAL_MODULE := com.test.share
LOCAL_SRC_FILES := com.test.static
include $(BUILD_PREBUILT)
BUILD_PREBUILT  :预編譯
LOCAL_MODULE_CLASS :指定编译生成文件类型
下面我们來看一下预编譯生成文件的类型

   


最后我们看一下如何在Android.mk中添加判断语句

   


我們找到上一期我们的Android.mk文件,将ifeq的判断语句添加进去
vi external/test/Android.mk

   


当时呢,我们在这里尝試了两种方式,现在我们通过判断的方式来确定使用哪种方式
下面我们将判断的语句添加进去

   


然后我們进行编译 先来touch src/mAIn.cpp  然后mm



   
这样雖然編译通过了,但是我們不知道編译的是静态庫还是动态库,我們再來添加点错误代码来看一下,

   


我們在這里添加上错误信息,然后編译,看看是在23行出的错還是在25行出的错,执行mm编译命令

   
可以看到是在23行出的错,所以当我们的USED_SHARE=true的话,我们程序走的就是动态庫,然后我们将true改成false,我们再来執行编译 mm

   


這就说明當我们使用ifeq时就可以判断我们的編译过程

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

沙发
发表于 2020-3-13 16:30:30 | 只看该作者
很好的资料!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2024-4-30 23:22 , Processed in 0.187500 second(s), 16 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表