从源码编译Android系统的Java类库和JNI动态库的方法
作者:喝醉的毛毛虫 发布时间:2022-05-01 17:55:44
标签:Android,编译
利用源码编译Android系统Java类库
1、编写Java项目和Android.mk文件
├── Android.mk
└── src
└── com
└── lhw
└── framework
└── led
└── Led.java
Led.java文件
package com.lhw.framework.led;
/**
* LED操作库
* @author Micky Liu
*/
public class Led {
public boolean turnOn() {
return true;
}
public boolean turnOff() {
return true;
}
}
Android.mk文件
LOCAL_PATH := $(call my-dir)
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_MODULE := framework_led
LOCAL_MODULE_TAGS := framework_led
LOCAL_JAVA_LIBRARIES :=
LOCAL_STATIC_JAVA_LIBRARIES :=
include $(BUILD_JAVA_LIBRARY)
2、编译
mmm /home/administrator/workspace/android_test/framework_led
编译结果:
Install: out/target/product/generic/system/framework/framework_led.jar
利用源码编译Android系统JNI动态库
1、代码和Android.mk编写
├── jni
│ ├── Android.mk
│ └── led.c
led.c
#include <jni.h>
#include <stdio.h>
jboolean Java_com_lhw_led_Led_turnOn(JNIEnv *env, jclass thiz)
{
return JNI_TRUE;
}
jboolean Java_com_lhw_led_LED_trunOff(JNIEnv *env, jclass thiz)
{
return JNI_TRUE;
}
注:方法名命名规则为:Java_包名_类名_方法名,可以用javah 命令根据java文件生成所需要的.h头文件。当然更好的办法是通过JNI_OnLoad和AndroidRuntime::registerNativeMethods实现动态注册,这样可以不用理会方法名规则。这里只是做个简单的例子,在后面会用一个例子实现动态注册。
Android.mk
LOCAL_PATH := $(call my-dir)
LOCAL_SRC_FILES := led.c
LOCAL_MODULE := led_jni
LOCAL_MODULE_TAGS := led_jni
LOCAL_PRELINK_MODULE := false
LOCAL_SHARED_LIBRARIES := libc
include $(BUILD_SHARED_LIBRARY)
2、编译
mmm /home/administrator/workspace/android_test/jni
编译结果:
Install: out/target/product/generic/system/lib/led_jni.so
0
投稿
猜你喜欢
- (1). 和反射+泛型有关的接口类型java.lang.reflect.Type:java语言中所有类型的公共父接口java.lang.re
- 1.SpringBoot整合JDBCTemplate1.1.导入jdbc相关依赖包主要的依赖包:<dependency> &nb
- maven周期maven的生命周期不止package,compile,clean。其实这是主要部分。以下截图其实展示的是maven的所有周期
- 在很多其他框架中,比如Python的Flask、node.js的KOA,Controller要想能够响应前端的请求都需要我们主动去注册到应用
- ObjectUtils.isEmpty()和null区别分配内存和赋值的区别isEmpty():判断值是否为空,即使已经分配内存,但没有赋值
- 前言我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。没错,它们是spring的基石,得益于它们的
- Java 线程类也是一个 object 类,它的实例都继承自 java.lang.Thread 或其子类。 可以用如下方式用 java 中创
- 这一定是困扰刚开始使用idea工具同学的一个大问题。三种情况会导致这种问题出现。1、你不小心按了键盘上的insert按键解决:再按一次吧2、
- 前言Mybatis作为一个应用广泛的优秀的ORM框架,已经成了JavaWeb世界近乎标配的部分,这个框架具有强大的灵活性,在四大组件(Exe
- 本文实现Unity调用手机摄像,拍摄,然后识别二维码,显示二维码的内容。需要导入一个zxing.unity.dll文件,现在这个脚本的识别数
- 目录Profile用法resourcesfilters多环境配置解决方案Profile用法我们在application.yml中为jdbc.
- 本文实例为大家分享了WPF实现3D翻牌式倒计时的具体代码,供大家参考,具体内容如下实现效果如下:思路:使用自定义控件,设置一个背板 MyCa
- Mybatis plus中like查询问题又谈到了Mybatis plus了,真的很是痛心疾首,在做模糊查询的时候出现了一个问题,版本还是2
- mybatis自动生成实体类、mapper文件、mapper.xml文件若采用mybatis框架,数据库新建表,手动编写的话,需要编写大量的
- 按照官方文档进行的配置:快速开始|mybatis-plus引入依赖:<!-- 引入mybatisPlus --> &
- 在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.tx
- 介绍1.BLE 是 Bluetooth Low Energy 的缩写,意思为低功耗蓝牙。由蓝牙技术联盟(Bluetooth SI
- Android动态修改ToolBar的Menu菜单效果图实现实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,
- 本文研究的主要内容是Java编程二项分布的递归和非递归实现,具体如下。问题来源:算法第四版 第1.1节 习题27:return (1.0 -
- 先看一下效果图实现思路:变成点的控件不是TextView和EditText而是Imageview。首先写一个RelativeLayout里边