Android源码之单双摄像头修改==展讯

2024-01-07 19:38

本文主要是介绍Android源码之单双摄像头修改==展讯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

客制化需求中经常有要改成单摄像或者又要改回双摄像的。这篇博客总结一下关于单双摄像头的修改。关于单双摄像头需要修改下面三个地方: 
<一>

device\sprd\scx35\sp7731g_1h10\BoardConfig.mk 源码如下
  • 1
#
# Copyright (C) 2011 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
## secure boot
BOARD_SECURE_BOOT_ENABLE := false
SECURE_BOOT_SIGNAL_KEY := false
include $(PLATCOMM)/BoardConfigCommon.mk
include $(PLATCOMM)/emmc/BoardConfigEmmc.mk# board configs
TARGET_BOOTLOADER_BOARD_NAME := sp7731gea_hdr# select camera 2M,3M,5M,8M
CAMERA_SUPPORT_SIZE := 5M
FRONT_CAMERA_SUPPORT_SIZE := 0P3M
TARGET_BOARD_NO_FRONT_SENSOR := false
TARGET_BOARD_CAMERA_FLASH_CTRL := falseCAMERA_PHYSICAL_SIZE := 1_3inch
FRONT_CAMERA_PHYSICAL_SIZE := 1_5inch
# camera sensor type
CAMERA_SENSOR_TYPE_BACK := "ov8825_mipi_raw"
CAMERA_SENSOR_TYPE_FRONT := "GC2155_MIPI_yuv"
AT_CAMERA_SENSOR_TYPE_BACK := "autotest_ov8825_mipi_raw"
AT_CAMERA_SENSOR_TYPE_FRONT := "autotest_GC2155_MIPI_yuv"
#face detect
TARGET_BOARD_CAMERA_FACE_DETECT := true
TARGET_BOARD_CAMERA_FD_LIB := omron#hdr capture
TARGET_BOARD_CAMERA_HDR_CAPTURE := true#full screen display
TARGET_BOARD_CAMERA_FULL_SCREEN_DISPLAY := true#uv denoise
TARGET_BOARD_CAMERA_UV_DENOISE := true#capture mem
TARGET_BOARD_LOW_CAPTURE_MEM := true#snesor interface
TARGET_BOARD_BACK_CAMERA_INTERFACE := mipi
TARGET_BOARD_FRONT_CAMERA_INTERFACE := mipi#select camera zsl cap mode
TARGET_BOARD_CAMERA_CAPTURE_MODE := false#sprd zsl feature
TARGET_BOARD_CAMERA_SPRD_PRIVATE_ZSL := true#rotation capture
TARGET_BOARD_CAMERA_ROTATION_CAPTURE := true
ifeq ($(strip $(ZEDIEL_PROJECT_CONFIG)), $(filter $(ZEDIEL_PROJECT_CONFIG), ZEDIEL_SI706AKA ZEDIEL_SI706ASB))
TARGET_BOARD_BACK_CAMERA_ROTATION := true
TARGET_BOARD_FRONT_CAMERA_ROTATION := true
endif
#rm zoom from 1080p recording
TARGET_BOARD_DISABLE_1080P_RECORDING_ZOOM := true#select continuous auto focus
TARGET_BOARD_CAMERA_CAF := true#select no camera flash
#TARGET_BOARD_CAMERA_NO_FLASH_DEV := true#image angle in different project
#TARGET_BOARD_CAMERA_ADAPTER_IMAGE := 180#pre_allocate capture memory
TARGET_BOARD_CAMERA_PRE_ALLOC_CAPTURE_MEM := false
#sc8830g isp ver 0;sc9630 isp ver 1
TARGET_BOARD_CAMERA_ISP_SOFTWARE_VERSION := 0#select mipi d-phy mode(none, phya, phyb, phyab)
TARGET_BOARD_FRONT_CAMERA_MIPI := phyb
TARGET_BOARD_BACK_CAMERA_MIPI := phya#select ccir pclk src(source0, source1)
TARGET_BOARD_FRONT_CAMERA_CCIR_PCLK := source0
TARGET_BOARD_BACK_CAMERA_CCIR_PCLK := source0# select WCN
BOARD_HAVE_BLUETOOTH := true
ifeq ($(strip $(USE_SPRD_WCN)),true)
BOARD_SPRD_WCNBT_SR2351 := true
BOARD_HAVE_FM_TROUT := true
BOARD_USE_SPRD_FMAPP := true
endif#2351 GPS
BOARD_USE_SPRD_4IN1_GPS := true# WIFI configs
BOARD_WPA_SUPPLICANT_DRIVER := NL80211
WPA_SUPPLICANT_VERSION      := VER_2_1_DEVEL
BOARD_WPA_SUPPLICANT_PRIVATE_LIB := lib_driver_cmd_sprdwl
BOARD_HOSTAPD_DRIVER        := NL80211
BOARD_HOSTAPD_PRIVATE_LIB   := lib_driver_cmd_sprdwl
BOARD_WLAN_DEVICE           := sc2351
WIFI_DRIVER_FW_PATH_PARAM   := "/data/misc/wifi/fwpath"
WIFI_DRIVER_FW_PATH_STA     := "sta_mode"
WIFI_DRIVER_FW_PATH_P2P     := "p2p_mode"
WIFI_DRIVER_FW_PATH_AP      := "ap_mode"
WIFI_DRIVER_MODULE_PATH     := "/system/lib/modules/sprdwl.ko"
WIFI_DRIVER_MODULE_NAME     := "sprdwl"# select sensor
#USE_INVENSENSE_LIB := true
USE_SPRD_SENSOR_LIB := true
# BOARD_HAVE_ACC := mxc622x
# BOARD_HAVE_ACC := mc3xxx
# BOARD_HAVE_ACC := stk8baxx
BOARD_HAVE_ACC := compatible
BOARD_ACC_INSTALL := 6
BOARD_HAVE_ORI := NULL
BOARD_ORI_INSTALL := NULL
# BOARD_HAVE_PLS := stk3x1x
BOARD_HAVE_PLS := gsl1680
#BOARD_HAVE_PLS := NULL# ext4 partition layout
TARGET_USERIMAGES_USE_EXT4 := true
BOARD_CACHEIMAGE_PARTITION_SIZE := 150000000
BOARD_PRODNVIMAGE_PARTITION_SIZE := 5242880
BOARD_SYSINFOIMAGE_PARTITION_SIZE := 5242880
BOARD_PERSISTIMAGE_PARTITION_SIZE := 2097152
BOARD_FLASH_BLOCK_SIZE := 4096
BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_PRODNVIMAGE_FILE_SYSTEM_TYPE := ext4
BOARD_SYSINFOIMAGE_FILE_SYSTEM_TYPE := ext4TARGET_SYSTEMIMAGES_SPARSE_EXT_DISABLED := true
TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false
TARGET_CACHEIMAGES_SPARSE_EXT_DISABLED := false
TARGET_PRODNVIMAGES_SPARSE_EXT_DISABLED := true
TARGET_SYSINFOIMAGES_SPARSE_EXT_DISABLED := truePRODUCT_COPY_FILES += $(BOARDDIR)/SC7730_UMS.xml:$(PRODUCT_OUT)/SC7730_UMS.xmlTARGET_GPU_USE_TILE_ALIGN := true
DEVICE_GSP_NOT_SCALING_UP_TWICE := true#TARGET_USES_LOGD := false# powerhint HAL config
# sprdemand, interhotplug, interpowerdown
BOARD_POWERHINT_HAL := sprdemand
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162

在这个文件中第一点:

TARGET_BOARD_NO_FRONT_SENSOR := false
如果为false代表机器有双摄像头,如果为true代表只有后置摄像头没有前置摄像头。
  • 1
  • 2
#select mipi d-phy mode(none, phya, phyb, phyab)
TARGET_BOARD_FRONT_CAMERA_MIPI := phyb
TARGET_BOARD_BACK_CAMERA_MIPI := phya
这里面对应的是前后摄像头处理的寄存器。双摄像头情况下前摄FRONT对应得是phyb,后摄BACK对应的是phya,如果要改成单摄像头,单后摄的话不用做修改,单前摄的话把前摄的处理屏蔽,后摄改成phyb。这里面要解释下硬件上处理单摄像头都是用后摄摄像头的配置。
  • 1
  • 2
  • 3
  • 4

<三>

kernel\arch\arm\boot\dts\sprd-scx35_sp7731gea_hdr.dts
文件中 gpio角如下sprd_sensor {compatible  = "sprd,sprd_sensor";reg = <0x60c00000 0x1000>;gpios = <&d_gpio_gpio 186 0    /* 0: main reset*/&d_gpio_gpio 188 0    /* 1: main powerdown*/前摄&d_gpio_gpio 186 0    /* 2:sub reset*/&d_gpio_gpio 187 0    /* 3:sub powerdown*/后摄&d_gpio_gpio 0 0     /* 4:main core voltage*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如果是双摄像头的话就是上面这种配置,如果是单摄的话将后摄和前摄的gpio角对换,

sprd_sensor {compatible  = "sprd,sprd_sensor";reg = <0x60c00000 0x1000>;gpios = <&d_gpio_gpio 186 0    /* 0: main reset*/&d_gpio_gpio 187 0    /* 1: main powerdown*/前摄&d_gpio_gpio 186 0    /* 2:sub reset*/&d_gpio_gpio 188 0    /* 3:sub powerdown*/后摄&d_gpio_gpio 0 0     /* 4:main core voltage*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以上是单双摄像头需要修改的地方。另外需要在

vendor\sprd\modules\libcamera\oem\src\sensor_cfg.c
  • 1
const SENSOR_MATCH_T main_sensor_infor_tab[]=
{
#ifdef CONFIG_BACK_CAMERA_MIPI
#if defined(CONFIG_CAMERA_ISP_VERSION_V3) || defined(CONFIG_CAMERA_ISP_VERSION_V4)
//{"s5k3l2xx_mipi", &g_s5k3l2xx_mipi_raw_info},{"s5k4h5yc_mipi", &g_s5k4h5yc_mipi_raw_info},{"s5k4h5yc_mipi", &g_s5k4h5yc_jsl_mipi_raw_info},{"ov8825_mipi_raw", &g_ov8825_mipi_raw_info},{"hi544_mipi_raw", &g_hi544_mipi_raw_info},{"ov5640_mipi_yuv", &g_ov5640_mipi_yuv_info},{"ov5640_mipi_raw", &g_ov5640_mipi_raw_info},{"ov5670_mipi_raw", &g_ov5670_mipi_raw_info},{"ov13850_mipi_raw", &g_ov13850_mipi_raw_info},{"ov8858_mipi_raw", &g_ov8858_mipi_raw_info},
#else#if 1//  {"sp2508_mipi",&g_sp2508_mipi_raw_info},//      {"gc2755_mipi",&g_gc2755_mipi_raw_info},//    {"sp2529_mipi",&g_SP2529_MIPI_yuv_info},
//      {"gc5004_mipi",&g_gc5004_mipi_raw_info},//  {"gc2145_mipi",&g_GC2145_MIPI_yuv_info},{"gc2145_back_mipi",&g_GC2145_BACK_MIPI_yuv_info},{"gc2355_mipi",&g_gc2355_mipi_raw_info},{"sp2509_back_mipi",&g_sp2509_back_mipi_raw_info},{"gc2365_back_mipi", &g_gc2365_back_mipi_raw_info},{"gc0310_mipi",&g_GC0310_BACK_MIPI_yuv_info},{"gc030a_back_mipi", &g_gc030a_back_mipi_raw_info},{"sp0a09_back_mipi",&g_sp0a09_back_mipi_raw_info},{"gc5024_mipi",&g_gc5024_mipi_raw_info},{"gc5005_mipi",&g_gc5005_mipi_raw_info},{"ov5675_mipi_raw",&g_ov5675_mipi_raw_info},//{"gc5024_mipi",&g_gc5024_mipi_raw_info},      //  {"sp5408_mipi",&g_sp5408_raw_info},//  {"sp5409_mipi",&g_sp5409_mipi_raw_info},//  {"ov5645_mipi",&g_ov5645_mipi_yuv_info},//    {"bf3a20_mipi",&g_BF3A20_mipi_yuv_info},#else{"ov8825_mipi_raw", &g_ov8825_mipi_raw_info},{"hi544_mipi_raw", &g_hi544_mipi_raw_info},{"ov5640_mipi_yuv", &g_ov5640_mipi_yuv_info},{"ov5648_mipi_raw", &g_ov5648_mipi_raw_info},{"ov2680_mipi_raw", &g_ov2680_mipi_raw_info},{"sr352_mipi_yuv", &g_sr352_mipi_yuv_info},{"imx219_mipi_raw", &g_imx219_mipi_raw_info},{"s5k4ec_mipi_yuv", &g_s5k4ec_mipi_yuv_info},//{"ov8830_mipi_raw", &g_ov8830_mipi_raw_info},{"imx179_mipi_raw", &g_imx179_mipi_raw_info},{"ov8865_mipi_raw", &g_ov8865_mipi_raw_info},{"ov13850_mipi_raw", &g_ov13850_mipi_raw_info},//{"s5k5ccgx_yuv_info", &g_s5k5ccgx_yuv_info_mipi},//{"s5k4e1ga_mipi_raw", &g_s5k4e1ga_mipi_raw_info},//{"hi351_mipi_yuv", &g_hi351_mipi_yuv_info},//{"ov5640_mipi_raw", &g_ov5640_mipi_raw_info},//{"ov5647_mipi_raw_info", &g_ov5647_mipi_raw_info},{"ov5670_mipi_raw", &g_ov5670_mipi_raw_info},//{"SP2529_MIPI_yuv", &g_SP2529_MIPI_yuv_info},#endif
#endif
#endif
#ifdef CONFIG_BACK_CAMERA_CCIR{"ov5640_yuv", &g_ov5640_yuv_info},{"hi253_yuv", &g_hi253_yuv_info},{"ov5640_yuv", &g_ov5640_yuv_info},{"hi253_yuv_info", &g_hi253_yuv_info},{"GT2005_yuv", &g_GT2005_yuv_info},{"s5k4ec_yuv", &g_s5k4ec_yuv_info},{"sr352_yuv", &g_sr352_yuv_info},//{"ov7675_yuv", &g_OV7675_yuv_info},//{"ov2655_yuv", &g_OV2655_yuv_info},//{"ov7675_yuv", &g_OV7675_yuv_info},//{"ov2640_yuv", &g_OV2640_yuv_info},{"HM2058_yuv", &g_HM2058_yuv_info},
#endif{"", NULL},
};const SENSOR_MATCH_T sub_sensor_infor_tab[]=
{
#ifdef CONFIG_FRONT_CAMERA_CCIR{"GC2155_yuv", &g_GC2155_yuv_info},{"hi253_yuv", &g_hi253_yuv_info},{"GC0308_yuv", &g_GC0308_yuv_info},{"GC2035_yuv", &g_GC2035_yuv_info},{"HI702_yuv", &g_HI702_yuv_info},{"ov7675_yuv", &g_OV7675_yuv_info},//{"GC0309_yuv", &g_GC0309_yuv_info},//{"OV7690_yuv", g_OV7690_yuv_info},
#endif#ifdef CONFIG_FRONT_CAMERA_MIPI
#if (defined(CONFIG_CAMERA_ISP_VERSION_V3) || defined(CONFIG_CAMERA_ISP_VERSION_V4)){"s5k5e3yx_mipi", &g_s5k5e3yx_mipi_raw_info},{"ov5648_mipi_raw", &g_ov5648_mipi_raw_info},{"ov2680_mipi_raw", &g_ov2680_mipi_raw_info},
#endif  {"sp2509_mipi",&g_sp2509_mipi_raw_info},{"sp0a08_mipi",&g_sp0a08_mipi_raw_info},{"sp0a09_mipi",&g_sp0a09_mipi_raw_info},//{"hi255_yuv", &g_hi255_yuv_info},
//  {"GC2155_MIPI_yuv", &g_GC2155_MIPI_yuv_info},{"GC0310_MIPI_yuv", &g_GC0310_MIPI_yuv_info},{"gc030a_mipi", &g_gc030a_mipi_raw_info},{"gc2145_mipi",&g_GC2145_MIPI_yuv_info},{"gc2365_mipi", &g_gc2365_mipi_raw_info},
#if !(defined(CONFIG_CAMERA_ISP_VERSION_V3) || defined(CONFIG_CAMERA_ISP_VERSION_V4)){"GC0310_MIPI_yuv", &g_GC0310_MIPI_yuv_info},{"sr030pc50_yuv", &g_sr030pc50_yuv_info},
#endif
#endif{"", NULL},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113

在这里面注意要有你对应的前后摄像头的驱动文件的引用,如果上面几点都OK了就能正确的修改陈单双摄像头。

这篇关于Android源码之单双摄像头修改==展讯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581031

相关文章

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st

Android多线程下载见解

通过for循环开启N个线程,这是多线程,但每次循环都new一个线程肯定很耗内存的。那可以改用线程池来。 就以我个人对多线程下载的理解是开启一个线程后: 1.通过HttpUrlConnection对象获取要下载文件的总长度 2.通过RandomAccessFile流对象在本地创建一个跟远程文件长度一样大小的空文件。 3.通过文件总长度/线程个数=得到每个线程大概要下载的量(线程块大小)。

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

时间服务器中,适用于国内的 NTP 服务器地址,可用于时间同步或 Android 加速 GPS 定位

NTP 是什么?   NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备【如计算机、手机】的时间的协议。 NTP 实现什么目的?   目的很简单,就是为了提供准确时间。因为我们的手表、设备等,经常会时间跑着跑着就有误差,或快或慢的少几秒,时间长了甚至误差过分钟。 NTP 服务器列表 最常见、熟知的就是 www.pool.ntp.org/zo

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热