Explore all Build Tool open source software, libraries, packages, source code, cloud functions and APIs.

Popular New Releases in Build Tool

webpack

parcel

v2.5.0

esbuild

v0.14.38

composer

2.3.4

pipenv

Release v2022.4.21

Popular Libraries in Build Tool

Python-100-Days

by jackfrued doticonpythondoticon

star image 114192 doticon

Python - 100天从新手到大师

webpack

by webpack doticonjavascriptdoticon

star image 60899 doticonMIT

A bundler for javascript and friends. Packs many modules into a few bundled assets. Code Splitting allows for loading parts of the application on demand. Through "loaders", modules can be CommonJs, AMD, ES6 modules, CSS, Images, JSON, Coffeescript, LESS, ... and your custom stuff.

parcel

by parcel-bundler doticonjavascriptdoticon

star image 40599 doticonMIT

The zero configuration build tool for the web. 📦🚀

esbuild

by evanw doticongodoticon

star image 31445 doticonMIT

An extremely fast JavaScript and CSS bundler and minifier

composer

by composer doticonphpdoticon

star image 26405 doticonMIT

Dependency Manager for PHP

pipenv

by pypa doticonpythondoticon

star image 22897 doticonMIT

Python Development Workflow for Humans.

bazel

by bazelbuild doticonjavadoticon

star image 18479 doticonApache-2.0

a fast, scalable, multi-language and extensible build system

n

by tj doticonshelldoticon

star image 16154 doticonMIT

Node version management

bower

by bower doticonjavascriptdoticon

star image 15076 doticonMIT

A package manager for the web

Trending New libraries in Build Tool

earthly

by earthly doticongodoticon

star image 6523 doticonMPL-2.0

Repeatable builds

AmnesiaTheDarkDescent

by FrictionalGames doticonc++doticon

star image 3256 doticonGPL-3.0

best-of-python

by ml-tooling doticonpythondoticon

star image 2098 doticonCC-BY-SA-4.0

🏆 A ranked list of awesome Python open-source libraries and tools. Updated weekly.

tsup

by egoist doticontypescriptdoticon

star image 1978 doticonMIT

The simplest and fastest way to bundle your TypeScript libraries.

emp

by efoxTeam doticontypescriptdoticon

star image 1716 doticonNOASSERTION

EMP Micro FE Base on webpack 5 & module federation

create-eth-app

by paulrberg doticonjavascriptdoticon

star image 1225 doticonMIT

Create Ethereum-powered apps with one command

one-day-one-npm-lib

by Haixiang6123 doticonhtmldoticon

star image 1153 doticonCC0-1.0

这本小书会带你造 10 个非常实用的 npm 库 📦

ni

by antfu doticontypescriptdoticon

star image 1035 doticonMIT

💡 Use the right package manager

cmake-examples-Chinese

by SFUMECJF doticonc++doticon

star image 885 doticon

快速入门CMake,通过例程学习语法。在线阅读地址:https://sfumecjf.github.io/cmake-examples-Chinese/

Top Authors in Build Tool

1

cran

113 Libraries

star icon425

2

googleapis

62 Libraries

star icon808

3

sbt

50 Libraries

star icon9126

4

sindresorhus

41 Libraries

star icon19236

5

distributions-io

27 Libraries

star icon67

6

apache

27 Libraries

star icon3498

7

npm

23 Libraries

star icon1478

8

akella

21 Libraries

star icon133

9

textmate

20 Libraries

star icon233

10

egoist

20 Libraries

star icon2361

1

113 Libraries

star icon425

2

62 Libraries

star icon808

3

50 Libraries

star icon9126

4

41 Libraries

star icon19236

5

27 Libraries

star icon67

6

27 Libraries

star icon3498

7

23 Libraries

star icon1478

8

21 Libraries

star icon133

9

20 Libraries

star icon233

10

20 Libraries

star icon2361

Trending Kits in Build Tool

Kerala, with its lush landscapes, serene backwaters, and vibrant culture, offers a plethora of enchanting experiences for honeymooners. Among the myriad of options, camping in Munnar stands out as a unique and romantic way to connect with nature and each other. For couples embarking on Kerala honeymoon packages from Delhi, Munnar's camping sites provide an unforgettable opportunity to create cherished memories in the lap of pristine wilderness.

Munnar: Nature's Haven in Kerala:

Nestled in the Western Ghats, Munnar is a picturesque hill station renowned for its rolling hills, mist-covered valleys, and tea plantations that stretch as far as the eye can see. The tranquility of Munnar's natural beauty provides an ideal setting for a romantic getaway, making it a popular destination for honeymooners.

Camping in Munnar: A Romantic Adventure:

Camping in Munnar is a remarkable way to embrace the beauty of nature while enjoying the thrill of outdoor living. Here's why it's an ideal addition to your Kerala honeymoon package from Delhi:

1. Private Moments in Nature:

Imagine waking up to the gentle rustling of leaves, the melodious chirping of birds, and the aroma of fresh mountain air. Camping in Munnar allows you and your beloved to escape the noise and distractions of city life and immerse yourselves in the serenity of nature. Share intimate moments under the starlit sky, cuddle up by the campfire, and create memories that will last a lifetime.

2. Scenic Campsites:

Munnar offers a range of picturesque campsites, each with its own unique charm. Whether you prefer a campsite nestled amid the tea plantations, beside a gurgling stream, or atop a hill with panoramic views, you'll find the perfect spot to set up your romantic retreat.

3. Adventurous Treks:

For adventure-loving couples, Munnar's camping sites often serve as a starting point for exhilarating treks. Hand in hand, you can embark on a journey through lush forests, meandering trails, and rolling hills, discovering hidden waterfalls and stunning viewpoints along the way.

4. Stargazing and Bonfires:

Munnar's pristine air and low light pollution make it an excellent destination for stargazing. With a clear night sky overhead, you can enjoy cozy evenings by the campfire, sharing stories, and gazing at the constellations above. It's a magical experience that brings you closer to the wonders of the universe.

5. Expert Assistance:

Many tour operators in Munnar offer camping packages that provide all the necessary equipment and support. You don't need to be a seasoned camper to enjoy this adventure; experienced guides ensure your safety and comfort throughout your stay.

Inclusion in Kerala Honeymoon Packages from Delhi:

Kerala honeymoon packages from Delhi often offer camping in Munnar as an optional activity. This means you can seamlessly integrate the camping experience into your overall itinerary, combining it with visits to Munnar's other attractions.

Tips for a Memorable Camping Experience:

  1. Pack Light: While camping equipment is provided, packing essentials like warm clothing, comfortable shoes, and personal items is essential.
  2. Capture the Moments: Don't forget to bring a camera or smartphone to capture the breathtaking beauty of Munnar and the romantic moments you share.
  3. Dine under the Stars: Opt for a camping package that includes a candlelit dinner under the stars for a truly romantic experience.

Conclusion: A Romantic Rendezvous in the Wilderness:

Camping in Munnar is not just an adventure; it's a romantic rendezvous with nature that allows you to disconnect from the world and reconnect with each other. For couples on Kerala honeymoon packages from Delhi, Munnar's camping sites provide a unique opportunity to celebrate love amidst the serene wilderness of the Western Ghats. So, if you're looking to infuse your honeymoon with romance, adventure, and the beauty of nature, consider camping in Munnar as a highlight of your Kerala getaway.

Kerala, often referred to as "God's Own Country," is a land of diverse landscapes, rich cultural heritage, and a unique approach to wellness. Among the many facets of Kerala's charm, Ayurvedic tourism has gained prominence as a holistic and rejuvenating experience. For travelers embarking on Kerala tour packages from Mumbai, this ancient system of medicine offers a pathway to healing, relaxation, and inner well-being.

The Essence of Ayurveda in Kerala:

Ayurveda, which translates to "science of life," is a traditional system of medicine that originated in India over 5,000 years ago. Kerala, with its abundant natural resources and an ingrained tradition of Ayurvedic practices, has become a hub for Ayurvedic tourism. The state's serene backwaters, lush forests, and pristine beaches create the ideal setting for Ayurvedic rejuvenation.

Ayurvedic Treatments:

At the heart of Ayurvedic tourism in Kerala are the holistic treatments and therapies offered by expert practitioners. These therapies are personalized to meet individual needs and are based on the principles of Ayurveda, which seek to balance the body, mind, and spirit.

  1. Panchakarma: This is one of the most well-known Ayurvedic treatments and involves a detoxification and purification process. Panchakarma therapies aim to eliminate toxins from the body, promoting overall health and well-being.
  2. Abhyanga: Abhyanga is a traditional Ayurvedic oil massage that helps relax the muscles, improve circulation, and alleviate stress. The use of herbal oils enhances its therapeutic benefits.
  3. Shirodhara: In this treatment, a continuous stream of warm, herbal oil is poured onto the forehead, inducing deep relaxation and calming the nervous system.
  4. Ayurvedic Diet: Ayurvedic practitioners also emphasize the importance of diet in maintaining health and balance. Ayurvedic cuisine is tailored to individual constitutions, promoting not only physical health but also harmony with nature.

Healing Amidst Nature:

One of the unique aspects of Ayurvedic tourism in Kerala is the natural surroundings in which treatments take place. Many Ayurvedic resorts and wellness centers are nestled in lush gardens, by tranquil lakes, or amidst pristine forests. The soothing sounds of nature and the fresh air enhance the healing process, creating an immersive experience.

Qualified Practitioners:

Kerala takes pride in its well-trained Ayurvedic practitioners who have mastered the art and science of traditional healing. Travelers can rest assured that they are in capable hands, receiving personalized treatments that align with their individual needs and wellness goals.

Incorporating Ayurveda into Kerala Tour Packages from Mumbai:

For travelers from Mumbai, adding an Ayurvedic experience to their Kerala tour packages is a rewarding choice. Many tour operators offer packages that combine cultural exploration, nature excursions, and Ayurvedic treatments. These packages provide a balanced itinerary that allows travelers to immerse themselves in Kerala's culture and natural beauty while reaping the benefits of Ayurveda.

Balancing the Body, Mind, and Spirit:

Ayurvedic tourism in Kerala is more than just a wellness retreat; it's a journey toward inner harmony and balance. It's an opportunity to escape the fast-paced urban life of Mumbai and find solace in the tranquil surroundings of Kerala. Ayurveda not only rejuvenates the body but also rejuvenates the spirit, allowing travelers to return home refreshed and reinvigorated.

Conclusion: A Holistic Escape

Kerala tour packages from Mumbai that include Ayurvedic tourism offer travelers a chance to escape the stresses of daily life and embark on a holistic journey of healing and self-discovery. In Kerala's serene environment, under the care of skilled Ayurvedic practitioners, travelers can experience the profound benefits of this ancient system of medicine. It's not just a vacation; it's a transformational experience that rejuvenates the body, mind, and spirit, leaving travelers with a sense of inner peace and well-being that lingers long after they return home.

Kerala, often referred to as "God's Own Country," is celebrated for its natural beauty, backwaters, and lush landscapes. However, beneath the serene surface of this stunning state lies a rich and diverse cultural tapestry. Among the many facets of Kerala's culture, the tribes of Wayanad stand out as a unique and integral part of the region's heritage. As you embark on your Kerala trip packages, exploring the lives, traditions, and cultures of these tribes adds a fascinating layer to your journey.

Wayanad: Nature's Bounty and Cultural Diversity

Wayanad, located in the northeastern part of Kerala, is a land of undulating hills, dense forests, and fertile valleys. This region is not only a paradise for nature enthusiasts but also home to several indigenous tribal communities, each with its own distinct way of life.

Prominent Tribes of Wayanad:

  1. Paniyas: The Paniya tribe is one of the most prominent indigenous communities in Wayanad. They are known for their unique customs, dialect, and strong connection to the forests. Paniyas traditionally practiced shifting agriculture and were skilled hunters and gatherers. Today, many have transitioned to settled farming, but their rich cultural heritage remains intact.
  2. Kurichiyas: The Kurichiyas are another significant tribal group in Wayanad. They are known for their expertise in cultivating cardamom, one of the region's main cash crops. The Kurichiyas have a rich oral tradition and have preserved their culture through storytelling and folklore.
  3. Adiyars: The Adiyars, also known as the Adiyas, are one of the oldest tribal communities in Wayanad. They primarily follow an agrarian way of life and have a unique system of shifting cultivation known as "Kumki." The Adiyars have their own distinct dialect and cultural practices.
  4. Kattunayakans: The Kattunayakan tribe is known for its close association with the forests of Wayanad. They have an in-depth knowledge of the region's flora and fauna, and traditionally, they were skilled honey collectors. Their harmonious relationship with nature is a fascinating aspect of their culture.

Experiencing Tribal Culture in Wayanad:

Exploring the tribal culture of Wayanad can be a deeply enriching experience for travelers on Kerala trip packages. Here's how you can immerse yourself in this cultural journey:

  1. Village Visits: Many tribal villages in Wayanad open their doors to visitors interested in learning about their way of life. You can interact with the locals, observe their traditional practices, and gain insights into their customs and rituals.
  2. Traditional Art Forms: The tribes of Wayanad have their own unique art forms, including dance and music. Witnessing a tribal dance performance is a vibrant and engaging way to experience their culture.
  3. Culinary Exploration: The tribes have their own culinary traditions, and sampling their traditional dishes is a delightful way to connect with their culture. You can try locally prepared tribal cuisine, which often includes dishes made from forest produce and locally grown ingredients.
  4. Tribal Markets: Some tribal communities in Wayanad have small markets where they sell handmade crafts, organic produce, and traditional artifacts. Visiting these markets allows you to support the tribes' livelihoods and take home souvenirs that carry cultural significance.

Responsible Tourism and Cultural Sensitivity:

While exploring the tribes of Wayanad can be an enriching experience, it's important to approach it with respect and cultural sensitivity. Always seek permission before taking photographs, and be mindful of the tribes' privacy and traditions. Additionally, consider supporting local initiatives that promote sustainable tourism and the welfare of tribal communities.

Inclusion in Kerala Trip Packages:

Many Kerala trip packages offer the opportunity to explore the tribal culture of Wayanad as part of their itineraries. It's an excellent way to add depth to your journey and gain a deeper understanding of Kerala's diverse cultural heritage.

Conclusion: A Journey into Wayanad's Soul

Exploring the tribes of Wayanad is not just a cultural excursion; it's a journey into the heart and soul of this enchanting region. It's a chance to connect with the indigenous communities, learn about their traditions, and gain a profound appreciation for the rich cultural diversity that makes Kerala truly unique. So, as you plan your Kerala trip packages, consider venturing into Wayanad and discovering the captivating world of its tribal communities.

When it comes to honeymoon packages, Kerala has earned its reputation as one of the most romantic destinations in the world. Amidst the various jewels that adorn this beautiful state, the Athirapilly Waterfalls stand out as an enchanting and crucial component of Kerala's tourism, especially for honeymooners. Let's delve into the importance of Athirapilly Waterfalls in the tourism map of Kerala honeymoon packages.


Setting the Romantic Tone

Athirapilly Waterfalls, often referred to as the "Niagara Falls of India," are renowned for their breathtaking beauty and serene ambiance. The cascading waters, lush green surroundings, and the soothing sound of the falls create a romantic atmosphere that is unparalleled. For honeymooners, this natural wonder sets the perfect tone for a romantic getaway.


Captivating Backdrop for Memories

The falls provide an awe-inspiring backdrop for capturing those precious honeymoon moments. Newlyweds can have their photographs taken against the backdrop of the falls, creating memories that will last a lifetime. The beauty of Athirapilly Waterfalls enhances the charm of honeymoon photographs, making them even more special.


Secluded Retreats

Several resorts and accommodations are situated in the vicinity of Athirapilly, offering honeymooners secluded and romantic retreats. These resorts often have rooms or cottages with stunning views of the waterfalls, allowing couples to enjoy the beauty and serenity of Athirapilly right from their doorstep.


Adventure and Bonding

Honeymoons are not just about relaxation; they are also about bonding and creating shared experiences. Athirapilly offers adventurous opportunities like trekking and nature walks through the surrounding rainforests. Couples can explore the lush greenery hand in hand, strengthening their bond amidst the wonders of nature.


Monsoon Magic

The monsoon season transforms Athirapilly Waterfalls into a mesmerizing spectacle. The falls are at their fullest during this time, and the entire region comes alive with vibrant greenery. Honeymooners who visit Athirapilly during the monsoons are treated to a romantic experience like no other, with the falls in their full glory and the aroma of wet earth in the air.


Nearby Attractions

Athirapilly's strategic location makes it a gateway to other romantic destinations in Kerala. The nearby Vazhachal Waterfalls, scenic viewpoints, and the Athirapilly-Vazhachal region's natural beauty provide couples with a variety of options for exploration and romantic escapades.


Serenity and Privacy

Unlike some bustling tourist destinations, Athirapilly offers honeymooners a sense of seclusion and privacy. The falls are surrounded by lush forests, and the relatively lower tourist footfall ensures that couples can enjoy peaceful moments together, undisturbed by crowds.


Local Culture and Cuisine

Honeymoon packages in Kerala often include experiences that introduce couples to the local culture and cuisine. Athirapilly allows honeymooners to savor traditional Kerala dishes while enjoying the serene backdrop of the falls. Engaging with the warm and hospitable locals adds a touch of authenticity to the overall experience.


Sustainable Tourism

Athirapilly is also a hub for eco-tourism, emphasizing the importance of responsible and sustainable tourism. Honeymooners who are environmentally conscious can appreciate the efforts to preserve this natural wonder, making their trip not only romantic but also responsible.

In conclusion, Athirapilly Waterfalls plays a pivotal role in the tourism map of Kerala's honeymoon packages. Its romantic allure, captivating natural beauty, and serene ambiance make it a must-visit destination for couples seeking a romantic and memorable getaway. Athirapilly not only provides a scenic backdrop for love but also offers a range of experiences that allow newlyweds to connect, create memories, and embark on a journey of love that begins with the enchantment of these magnificent falls. It's no wonder that Athirapilly Waterfalls has become an essential stop for honeymooners on their journey through Kerala's romantic landscape.


Best Time To Visit Athirapilly waterfalls


The best time to visit Athirapilly Waterfalls is during the post-monsoon and winter months, which generally span from September to February. This period offers the most favorable weather and the most captivating views of the falls. Here's a breakdown of the seasons and their suitability for visiting Athirapilly:


Post-Monsoon (September to November): This is an excellent time to visit Athirapilly as the monsoon rains have receded, leaving the surroundings lush and green. The waterfalls are at their fullest during this time, creating a mesmerizing spectacle. The weather is relatively cool, making it ideal for outdoor activities like trekking and exploring the nearby forests.


Winter (December to February): The winter months are also an excellent time to visit Athirapilly. The weather is pleasantly cool and dry, and the waterfalls maintain a good flow. This is a popular time for tourists, especially honeymooners, as the romantic ambiance is at its peak. Clear skies and comfortable temperatures make it an ideal time for sightseeing and outdoor adventures.


Pre-Monsoon (March to May): While the weather is generally warm during this period, visiting Athirapilly in the pre-monsoon season is still possible. The falls may have slightly lower water levels compared to post-monsoon, but the lush greenery and the surrounding flora are still beautiful. If you can handle the warmth, you can enjoy the serene ambiance with fewer crowds.


Monsoon (June to August): The monsoon season in Kerala, including Athirapilly, is characterized by heavy rainfall. While the falls are at their most spectacular during this time, with a torrential flow of water, it's not the safest or most comfortable time to visit. Landslides and flooding can occur, making it a less suitable period for travel and outdoor activities.


Keep in mind that weather patterns can vary from year to year, so it's a good idea to check the current weather conditions and forecasts before planning your trip. Ultimately, the best time to visit Athirapilly Waterfalls depends on your preferences, whether you prefer the lush greenery and full waterfalls of the post-monsoon and winter months or are willing to experience the dramatic monsoon season, albeit with certain risks and challenges.

Kerala, often referred to as "God's Own Country," is renowned for its enchanting backwaters, and one of the most iconic ways to experience them is through Kerala houseboat packages. These floating marvels offer an immersive experience of Kerala's natural beauty, culture, and tranquility. Let's set sail and explore some of the best destinations for Kerala houseboat packages.


Alleppey (Alappuzha): The Venice of the East


Alleppey, often called the "Venice of the East," is the crown jewel of Kerala's backwaters and the epicenter of houseboat tourism. Its intricate network of canals, serene lagoons, and lush paddy fields create a mesmerizing backdrop for houseboat cruises. The Alleppey houseboat experience offers a unique opportunity to witness daily life along the waterways, savor traditional Kerala cuisine, and soak in the tranquil beauty of the backwaters.


Kumarakom: The Idyllic Retreat


Kumarakom, nestled on the banks of Vembanad Lake, is another popular destination for houseboat packages. This idyllic locale is home to thriving bird sanctuaries, lush greenery, and serene waters. A houseboat cruise in Kumarakom allows you to explore the intricate labyrinth of canals, visit the Kumarakom Bird Sanctuary, and unwind in luxurious resorts offering stunning lakeside views.


Kollam: The Quieter Escape


Kollam, also known as Quilon, offers a quieter and less touristy houseboat experience. The Ashtamudi Lake, with its eight arms, provides a unique backdrop for houseboat cruises. Travelers can meander through the calm waters, visit Munroe Island, and immerse themselves in the traditional village life of Kerala.


Thiruvallam: Backwaters and Beaches


Thiruvallam, near the state capital Thiruvananthapuram, combines the allure of backwaters with the charm of the Arabian Sea. The Karamana River meets the sea here, creating a unique houseboat experience. Travelers can enjoy canoe rides through the mangrove forests, visit the famous Parasurama Temple, and relax on nearby beaches, offering a diverse range of experiences in one destination.


Kasaragod: Offbeat Beauty


Located in the northernmost part of Kerala, Kasaragod is an offbeat destination for houseboat packages. The Valiyaparamba Backwaters, fed by four rivers, offer a hidden gem for those seeking a less-traveled path. Explore charming islands, historic forts, and fishing villages, all while enjoying the serene beauty of this less-visited backwater paradise.


Kochi (Cochin): Urban Elegance and Backwater Charm


Kochi, a major port city, seamlessly blends urban life with backwater charm. The Vembanad backwaters, known as Kochi's "Queen of the Arabian Sea," provide a unique backdrop to this cosmopolitan city. A houseboat cruise in Kochi allows travelers to experience the fusion of history, culture, and natural beauty.


Kuttanad: The Rice Bowl of Kerala


Kuttanad, often referred to as the "Rice Bowl of Kerala," offers a unique houseboat experience. This region is known for its paddy fields that lie below sea level. Houseboat cruises here take you through the canals amidst emerald green rice paddies, allowing you to witness the rustic charm of rural Kerala.


Thanneermukkom: Freshwater Oasis


Thanneermukkom is known for its freshwater lake created by the Thanneermukkom Bund, separating the saltwater of Vembanad Lake from the freshwater of the interior. The serene waters and lush landscapes make it an excellent destination for birdwatching, nature lovers, and houseboat enthusiasts.


Kuttanadu: Backwaters Amidst Paddy Fields


Kuttanadu, often referred to as the "Rice Bowl of Kerala," offers a unique houseboat experience. It is renowned for its paddy fields situated below sea level. Houseboat cruises take you through the canals amidst emerald green rice paddies, allowing you to witness the rustic charm of rural Kerala.


Munnar: Hills and Backwaters


While Munnar is primarily known for its tea plantations and hill stations, it also offers a unique houseboat experience on the Kundala Dam. This combination of hill station and backwaters provides a diverse experience for travelers seeking both adventure and tranquility.

Each of these destinations offers a distinct houseboat experience, showcasing Kerala's natural beauty, culture, and diverse landscapes. Whether you prefer the bustling backwaters of Alleppey, the serene charm of Kumarakom, or the offbeat allure of Kasaragod, Kerala's houseboat packages promise an unforgettable journey through the heart of God's Own Country. Set sail and let the backwaters of Kerala weave their magic, creating cherished memories that will last a lifetime.

Kerala, often celebrated as "God's Own Country," is a captivating destination with diverse landscapes, rich cultural heritage, and serene backdrops. Two of its most enchanting regions, Wayanad and Munnar, beckon travelers with their unique charms and breathtaking vistas. In this comprehensive guide, we will embark on a virtual journey through these picturesque destinations and explore how Kerala tour packages from Delhi can help make your exploration seamless and memorable.

Wayanad: Where Nature Embraces You

Enveloped by the Western Ghats, Wayanad is a land of lush greenery, pristine forests, and rolling hills. The name "Wayanad" translates to "Land of Paddy Fields," and it's easy to see why. This region boasts verdant landscapes, making it a haven for nature enthusiasts and adventure seekers.

  1. Exploring Wayanad's Natural Wonders
  2. Wayanad is a treasure trove of natural wonders waiting to be explored. Kerala tour packages from Delhi often include visits to:
  • Edakkal Caves: These ancient caves feature prehistoric petroglyphs, and the hike to reach them is an adventure in itself.
  • Chembra Peak: Embark on a trek to the heart-shaped lake atop this peak, offering panoramic views of Wayanad.
  • Soochipara Waterfalls: An ideal spot for a refreshing dip, these falls cascade through lush forests.
  1. Wildlife Encounters in Wayanad
  • Wayanad Wildlife Sanctuary: Home to diverse wildlife including elephants, tigers, and leopards, the sanctuary offers thrilling jeep safaris.
  • Tholpetty Wildlife Sanctuary: Known for its rich biodiversity, this sanctuary is a birdwatcher's paradise.
  1. Cultural and Culinary Delights
  • Thirunelli Temple: A historic temple surrounded by dense forests, offering a spiritual and serene experience.
  • Bamboo Rice: Don't miss the opportunity to taste bamboo rice, a unique culinary delight of Wayanad.

Munnar: The Tea Lover's Paradise

Munnar, nestled in the Western Ghats, is synonymous with verdant tea plantations, mist-covered hills, and a tranquil ambiance. It's a destination that allows you to unwind amidst nature's splendor.

  1. Tea Plantations and Experiences
  • Tea Plantation Tours: Explore the sprawling tea gardens, learn about the tea-making process, and enjoy panoramic views.
  • Kolukkumalai Tea Estate: Visit one of the highest tea estates in the world, where you can witness the sunrise amidst the clouds.
  1. Adventures in Munnar
  • Eravikulam National Park: Home to the endangered Nilgiri Tahr, this park offers trekking opportunities and captivating landscapes.
  • Anamudi Peak: The highest peak in South India, it's a challenging trek for adventure enthusiasts.
  1. Munnar's Serene Beauty
  • Mattupetty Dam: A serene spot for boating, picnics, and enjoying the calm waters surrounded by lush green hills.
  • Attukal Waterfalls: A hidden gem, this waterfall is surrounded by dense forests and offers breathtaking views.

Kerala Tour Packages from Delhi: Crafting Your Dream Getaway

Kerala tour packages from Delhi offer the perfect blend of convenience and exploration. These packages cater to diverse interests and preferences, ensuring that your journey is seamless and memorable. Here's how they enhance your Kerala tour experience:

  1. Customization: Tour packages can be tailored to your interests, whether you're a nature enthusiast, adventure seeker, or culture buff.
  2. Local Insights: Local guides enhance your experience with their knowledge of hidden gems, cultural nuances, and insider tips.
  3. All-Inclusive: Packages often include accommodation, transportation, meals, and activities, eliminating the hassle of planning and booking separately.
  4. Value for Money: By bundling components of your trip, tour packages often offer cost savings compared to individual bookings.

In conclusion, a Kerala tour encompassing Wayanad and Munnar promises an unforgettable journey through lush landscapes, cultural treasures, and memorable adventures. Whether you're sipping freshly brewed tea amidst Munnar's tea gardens or trekking through Wayanad's pristine forests, Kerala's charm will captivate your heart. Consider Kerala tour packages from Delhi to make the most of your exploration, allowing you to focus on creating cherished memories in this slice of paradise. Regardless of when you visit, Wayanad and Munnar await with open arms, ready to embrace you in their natural beauty and warmth.

Embark on a Romantic Journey with Kerala Honeymoon Packages: The Best Honeymoon Destinations in Kerala


A honeymoon is a special time for newlyweds, a time to create lasting memories in the early days of their marriage. For couples seeking a magical and memorable honeymoon experience, Kerala, often referred to as "God's Own Country," offers a myriad of romantic experiences and breathtaking landscapes. Kerala honeymoon packages cater to all your desires, ensuring your honeymoon is nothing short of extraordinary.

Why Choose Kerala for Your Honeymoon?

Kerala is a tropical paradise, known for its lush greenery, tranquil backwaters, and pristine beaches. It's a destination that seamlessly blends nature's beauty with cultural richness, making it an ideal spot for honeymooners. Here are some compelling reasons why Kerala should be at the top of your honeymoon destination list:

  1. Scenic Beauty: Kerala boasts a diverse landscape, from mist-covered hill stations like Munnar to serene backwaters like Alleppey and picturesque beaches like Kovalam. Each location offers a unique and breathtaking backdrop for your romantic getaway.
  2. Luxurious Accommodations: Kerala offers a range of accommodation options, from cozy boutique resorts to luxurious houseboats, ensuring that you can find the perfect setting for your romantic escape.
  3. Cultural Experiences: Explore Kerala's rich culture and heritage with visits to ancient temples, palaces, and traditional dance performances. The state's cultural richness adds depth to your honeymoon experience.
  4. Culinary Delights: Savor the delectable flavors of Kerala cuisine, which includes dishes like Malabar biryani, seafood delights, and delectable desserts. Kerala honeymoon packages often include special candlelit dinners for couples.
  5. Relaxation and Wellness: Kerala is known for its Ayurvedic traditions. Pamper yourselves with rejuvenating Ayurvedic spa treatments and wellness therapies, providing relaxation and rejuvenation during your honeymoon.

Best Honeymoon Destinations in Kerala

  1. Munnar: Known for its tea gardens, misty hills, and cool climate, Munnar is a haven for couples seeking a romantic escape amidst nature's beauty. A visit to the tea plantations and a trek to Anamudi Peak are must-do activities.
  2. Alleppey: Explore the backwaters of Alleppey in a traditional houseboat. A serene cruise through the tranquil waters, surrounded by lush greenery, is the epitome of romance.
  3. Kovalam: For couples who love the beach, Kovalam offers golden sands and clear waters. Spend your days sunbathing, swimming, or indulging in watersports.
  4. Wayanad: A lush green paradise, Wayanad is perfect for couples seeking solitude in the lap of nature. Visit beautiful waterfalls, explore wildlife sanctuaries, and enjoy a stay in eco-friendly resorts.
  5. Thekkady: If you both are nature enthusiasts, Thekkady is the place to be. Explore Periyar Wildlife Sanctuary, go for a jungle safari, and enjoy a spice plantation tour.

Kerala Honeymoon Packages

Kerala honeymoon packages are tailored to meet the unique needs and preferences of honeymooning couples. These packages often include romantic stays at carefully chosen resorts, candlelit dinners, sightseeing tours to iconic destinations, and even cultural experiences. By opting for a package, you can focus on creating memories rather than planning logistics.

In conclusion, Kerala offers an enchanting blend of nature, culture, and romance, making it one of the most sought-after honeymoon destinations in India. With the convenience and customization offered by Kerala honeymoon packages, your honeymoon can be everything you've dreamed of and more. So, embrace the charm of Kerala, and let your love story begin in this exquisite destination.

A honeymoon is a special chapter in the book of love, a time when newlyweds celebrate their union in a destination that exudes romance and serenity. When it comes to selecting a honeymoon destination in India, Wayanad, situated in the picturesque state of Kerala, stands out as an ideal choice. In this comprehensive guide, we will delve into the captivating allure of Wayanad for honeymooners and explore how Kerala honeymoon packages from Hyderabad can make your romantic journey truly magical.

Wayanad's Enchanting Landscape

Wayanad, nestled in the Western Ghats of Kerala, is a lush green paradise that offers a perfect blend of natural beauty and tranquility. Here's why it's an irresistible destination for honeymooners:

  1. Lush Greenery: Wayanad is blanketed with verdant forests, rolling hills, and spice plantations. The soothing green landscapes create an idyllic backdrop for a romantic escape.
  2. Serenity: Away from the hustle and bustle of city life, Wayanad provides an atmosphere of peace and serenity, making it an ideal setting for couples to unwind and connect.
  3. Adventure: For adventure-loving couples, Wayanad offers trekking, wildlife safaris, and nature walks, providing opportunities for thrilling experiences together.

Honeymoon Experiences in Wayanad

A honeymoon in Wayanad is an opportunity to create cherished memories together. Here are some must-experience activities:

  1. Stay Amidst Nature: Opt for a romantic stay in a treehouse or a cozy cottage tucked away in the forests. These accommodations allow you to wake up to the sounds of chirping birds and rustling leaves.
  2. Chembra Peak Trek: Embark on a trek to Chembra Peak, which is famous for its heart-shaped lake. The journey to this natural wonder is both challenging and rewarding, offering breathtaking views.
  3. Banasura Sagar Dam: Visit India's largest earth dam, Banasura Sagar Dam, for a serene boat ride on the reservoir. The surrounding hills add to the charm of this location.
  4. Pookode Lake: Enjoy a peaceful boat ride on Pookode Lake, surrounded by lush greenery and cool, clean water. It's an ideal spot for a romantic picnic.
  5. Edakkal Caves: Explore the ancient Edakkal Caves, which are adorned with prehistoric petroglyphs. The trek to reach the caves is an adventure in itself.
  6. Wayanad Wildlife Sanctuary: Take a wildlife safari in the Wayanad Wildlife Sanctuary and spot exotic species like elephants, leopards, and deer.

Kerala Honeymoon Packages from Hyderabad

Kerala honeymoon packages from Hyderabad are tailored to ensure that your honeymoon is nothing short of perfection. Here's how they enhance your romantic getaway:

  1. Customization: Honeymoon packages can be customized to align with your preferences, whether you prefer adventure, relaxation, or cultural experiences.
  2. Seamless Planning: All aspects of your trip, including accommodation, transportation, meals, and activities, are meticulously planned, allowing you to focus solely on each other.
  3. Local Expertise: The packages often include the services of local guides who can enhance your experience with insights and recommendations.
  4. Value for Money: Bundled packages can offer cost savings compared to booking individual elements of your trip separately.

Cultural Delights and Culinary Experiences

Wayanad isn't just about natural beauty; it's also a place rich in culture and tradition. Kerala honeymoon packages from Hyderabad may include opportunities to:

  1. Explore Local Villages: Interact with the warm and friendly locals, learn about their customs, and witness their traditional way of life.
  2. Attend Cultural Performances: Enjoy traditional dance performances like Kathakali and Theyyam, which provide a glimpse into Kerala's vibrant culture.
  3. Culinary Adventures: Savor Kerala's delectable cuisine, including dishes like Malabar biryani, seafood specialties, and mouthwatering desserts. Don't forget to try the famous Kerala sadya, a sumptuous feast served on a banana leaf.

In Conclusion

Wayanad, with its lush landscapes, serene ambiance, and a plethora of romantic experiences, is the perfect canvas for your honeymoon masterpiece. Whether you're strolling hand in hand through spice plantations, trekking to heart-shaped lakes, or savoring delicious Kerala cuisine, Wayanad offers a memorable journey of love and togetherness.

By choosing Kerala honeymoon packages from Hyderabad, you can ensure that your honeymoon is a seamless and enchanting experience. These packages provide convenience, customization, and the assurance that every detail of your romantic journey is meticulously planned, leaving you with nothing to worry about except basking in each other's company. So, embark on this romantic odyssey, and let Wayanad weave its magic as you create beautiful memories that will last a lifetime.

Kerala, often referred to as "God's Own Country," is renowned for its breathtaking landscapes, lush greenery, and serene backwaters. Among the many unique experiences this Indian state has to offer, one stands out as an iconic symbol of Kerala's charm – the houseboat. Kerala houseboats, often bundled into enticing Kerala houseboat packages, offer travelers an unforgettable way to immerse themselves in the state's natural beauty and cultural richness.

The Kerala Houseboat Experience

Houseboats in Kerala are essentially floating homes, traditionally made from wooden planks and coconut fibers, transformed into cozy and comfortable abodes for tourists. These houseboats come in various sizes, from compact single-bedroom vessels to luxurious multi-bedroom options, accommodating different budgets and group sizes. The interiors are thoughtfully designed to provide all the necessary amenities and modern comforts, ensuring a comfortable stay.

A houseboat journey in Kerala typically begins from prominent backwater hubs like Alleppey (Alappuzha) or Kumarakom. As you board your floating sanctuary, you set out on a voyage through a network of interconnected canals, lagoons, and serene lakes. The calm and tranquil backwaters are adorned with lush green paddy fields, swaying coconut palms, and quaint villages, providing a picturesque setting for your journey.

Activities on Kerala Houseboats

  1. Cruising the Backwaters: The primary activity on a Kerala houseboat is, of course, the leisurely cruise itself. As you drift along, you can watch the world go by, observing the daily life of local communities and the vibrant birdlife that calls the backwaters home.
  2. Culinary Delights: Houseboat crews are known for their culinary expertise. Guests are treated to delicious Kerala cuisine, including traditional dishes like Karimeen (pearl spot fish) and Kerala Sadya (a sumptuous feast served on a banana leaf). The meals are often included in Kerala houseboat packages.
  3. Bird Watching: Kerala's backwaters are a haven for birdwatchers. Bring your binoculars and be prepared to spot a variety of birds, including kingfishers, herons, and even majestic eagles.
  4. Fishing: Many houseboats offer fishing experiences, allowing guests to try their hand at catching fish in the backwaters. It's a unique and immersive way to connect with the local way of life.
  5. Village Visits: Depending on your route, you may have the opportunity to stop at local villages along the way. This provides a chance to interact with the friendly locals, learn about their traditions, and perhaps even shop for souvenirs.
  6. Sunset Views: Kerala's sunsets are legendary. From the deck of your houseboat, you can witness the sky transform into a stunning canvas of colors as the sun dips below the horizon.

Kerala Houseboat Packages

For travelers, Kerala houseboat packages are a convenient way to plan their backwater adventures. These packages often include a combination of houseboat stays, meals, and activities, making it easier to explore the backwaters without the hassle of individual bookings. There are options to suit various budgets, from budget-friendly to ultra-luxurious, ensuring that every traveler can find the perfect package to suit their needs.

In conclusion, a Kerala houseboat experience is a journey that combines nature, culture, and tranquility. It's a chance to disconnect from the hustle and bustle of modern life and immerse yourself in the serenity of Kerala's backwaters. Whether you're a solo traveler seeking solitude or a family looking for a unique bonding experience, Kerala houseboat packages offer something for everyone, making it a must-do activity when visiting this enchanting state. So, embark on this unforgettable adventure, and let Kerala's backwaters weave their magic around you.

Are you dreaming of exploring the stunning landscapes and vibrant culture of Kerala without burning a hole in your pocket? Look no further! Seasonz India Holidays brings you an array of Kerala tour packages under 10000 rupees, promising unforgettable experiences without breaking the bank.


Kerala Calling: Budget-Friendly Packages


Embark on a budget-friendly journey through the picturesque landscapes of Kerala with our specially crafted tour packages. Whether you're a nature enthusiast, beach lover, or cultural explorer, we have something for everyone at prices that won't leave you counting pennies.


Unraveling Kerala's Charm: What to Expect


From the tranquil backwaters of Alleppey to the misty hills of Munnar, Kerala offers a diverse range of experiences waiting to be explored. Our budget packages include visits to iconic attractions like the serene Kovalam Beach, the enchanting Athirappilly Waterfalls, and the historic Fort Kochi.


Affordable Luxury: Experience Kerala's Hospitality


Indulge in the warm hospitality and authentic flavors of Kerala without worrying about your budget. Our packages include comfortable accommodation in budget-friendly hotels and resorts, ensuring a cozy stay throughout your journey.


Tailored Experiences: Customize Your Adventure


At Seasonz India Holidays, we understand that every traveler is unique. That's why we offer customizable tour packages that allow you to tailor your Kerala adventure according to your preferences and budget. Whether you're traveling solo, with family, or in a group, we've got you covered.


Seamless Travel Experience: Hassle-Free Planning


Leave the stress of planning behind and let us take care of all the details. From arranging transportation to booking accommodations and organizing sightseeing tours, our team ensures a seamless travel experience from start to finish.


Expert Guidance: Local Insights and Tips


Our experienced guides provide valuable insights into Kerala's rich culture, history, and traditions, enriching your travel experience. From recommending the best local eateries to sharing insider tips on hidden gems, they're here to make your journey unforgettable.


Book Your Kerala Adventure Today


Don't let budget constraints hold you back from experiencing the magic of Kerala. With Seasonz India Holidays' affordable tour packages, you can embark on the adventure of a lifetime without breaking the bank. Book your Kerala tour package under 10000 rupees today and get ready to create memories that will last a lifetime.

Kerala Tourism's New Horizons: Attracting Pune's Adventurers


Introduction


Kerala, often referred to as "God's Own Country," has long been a cherished destination for travelers seeking natural beauty, serene backwaters, lush green landscapes, and a rich cultural heritage. In recent years, the state has witnessed a wave of innovative initiatives and infrastructure developments in its tourism sector, attracting a growing influx of visitors from various parts of India, including Pune. This blog will delve into some of the exciting new innovations in Kerala tourism and explore why Puneites are increasingly drawn to this southern paradise.


Sustainable Tourism Initiatives


Kerala has been at the forefront of sustainable tourism practices. The state government and local communities have taken several steps to minimize the environmental impact of tourism. Initiatives like responsible wildlife tourism, eco-friendly homestays, and treehouse accommodations in the midst of lush forests have become popular options for travelers. Pune residents, who often have a strong inclination toward environmental conservation, find these initiatives particularly appealing.


Adventure Tourism


Kerala is no longer just about tranquil houseboat rides; it has embraced adventure tourism with open arms. The Western Ghats that stretch across the state offer ample opportunities for trekking, mountain biking, and rock climbing. Pune, known for its adventurous spirit, is drawn to these activities in Kerala. The state's terrain provides a fresh and challenging backdrop for adventure enthusiasts from Pune to explore.


Wellness Tourism


Kerala has long been synonymous with Ayurveda and holistic wellness. The state's spas, wellness centers, and yoga retreats offer a perfect escape from the hustle and bustle of city life. For Pune residents seeking relaxation and rejuvenation, Kerala's wellness tourism has emerged as a top choice. The ancient healing techniques and serene settings make it a sought-after destination.


Culinary Tourism


The delectable flavors of Kerala's cuisine have captivated the taste buds of Pune's food enthusiasts. Kerala's rich seafood dishes, spicy curries, and traditional delicacies like appam and stew are gaining popularity among Puneites. Food festivals and culinary tours have become a highlight of Kerala tourism, enticing travelers from Pune to savor the state's diverse culinary offerings.


Improved Infrastructure


Kerala has invested significantly in enhancing its tourism infrastructure. Modern airports, well-maintained roads, and improved connectivity make it easier for Pune residents to access the state. The introduction of direct flights from Pune to major Kerala cities has significantly reduced travel time and increased convenience.


Unique Accommodations


Kerala offers an array of unique accommodations, ranging from floating cottages in backwaters to luxury resorts in the hills. The trend of staying in treehouses and houseboats has captured the imagination of travelers, including those from Pune, seeking extraordinary experiences. These unconventional stays provide a chance to connect with nature and escape the ordinary.


Cultural Experiences


Kerala's rich cultural heritage is showcased through traditional dance forms like Kathakali and Mohiniyattam, as well as vibrant festivals like Onam and Thrissur Pooram. Pune residents, eager to explore different cultures, are attracted to Kerala's cultural experiences. The opportunity to witness and participate in these cultural celebrations offers a unique and immersive travel experience.


Accessibility and Connectivity


The increased connectivity between Pune and Kerala has played a pivotal role in the growing flow of travelers. With more airlines offering direct flights and the expansion of railway networks, Puneites can now easily plan their trips to Kerala. This enhanced accessibility has encouraged many to explore the state's diverse attractions.


Conclusion


Kerala's tourism industry is evolving, and its innovative approaches are attracting a diverse range of travelers, including adventure seekers from Pune. The state's commitment to sustainable tourism, coupled with its unique offerings in adventure, wellness, and culinary experiences, has made it a preferred destination for those looking for a blend of nature, culture, and adventure.

As Kerala continues to reinvent itself as a multifaceted travel destination, Pune's residents will likely keep flowing in, eager to explore the uncharted territories of "God's Own Country." With its pristine beauty and innovative tourism initiatives, Kerala is well-poised to welcome visitors from Pune and beyond for years to come, creating lasting memories and fostering a stronger connection between these two vibrant regions. Kerala Honeymoon Packages From Pune.

Kerala, known as "God's Own Country," is a land of diverse landscapes, vibrant culture, and hidden gems waiting to be discovered. Among the many captivating destinations in Kerala, Kumblangi stands out as a tranquil retreat that offers a unique and authentic experience for travelers on Kerala tour packages from Hyderabad. Located on the outskirts of Kochi, Kumblangi is a picturesque village that immerses you in the serenity of rural life while providing a glimpse into the rich cultural heritage of Kerala.


The Charm of Kumblangi:

Kumblangi, often referred to as the "Model Tourism Village of India," is not your typical tourist destination. Instead, it's a place where travelers can escape the hustle and bustle of city life and unwind in a peaceful and idyllic setting. This quaint village is known for its sustainable tourism initiatives and its commitment to preserving the traditional way of life.

Experiencing Village Life:

For travelers seeking a break from the hectic pace of Hyderabad, Kumblangi offers a chance to slow down and embrace the simplicity of rural living. As you explore the village, you'll witness everyday scenes of villagers going about their lives, tending to their farms, and engaging in traditional crafts.

Backwater Serenity:

Kumblangi is situated along the serene backwaters of Kerala, providing an opportunity to experience the beauty of these waterways without the crowds. You can take a leisurely boat ride along the narrow canals, surrounded by lush greenery, coconut palms, and abundant birdlife. It's a peaceful and rejuvenating experience that allows you to connect with nature.

Homestays and Local Cuisine:

One of the highlights of visiting Kumblangi is the chance to stay in traditional homestays. These accommodations offer a glimpse into the warm hospitality of Kerala. Your hosts will treat you to authentic Kerala cuisine, prepared with fresh, locally sourced ingredients. Savoring homemade delicacies is a delightful way to immerse yourself in the local culture.

Coir Making and Other Crafts:

Kumblangi is known for its coir making, and you can visit local coir-making units to witness this traditional craft in action. Additionally, the village is home to artisans who specialize in crafting intricate mats, baskets, and other handwoven products. You can interact with these skilled craftsmen and even try your hand at creating your own souvenirs.

Responsible Tourism:

Kumblangi's commitment to responsible tourism is evident in its efforts to preserve its natural surroundings and cultural heritage. The village follows sustainable practices, and initiatives like waste management and eco-friendly agriculture are integral to its way of life. By visiting Kumblangi, travelers can support these eco-friendly endeavors and contribute to the preservation of this charming village.

Incorporating Kumblangi into Kerala Tour Packages from Hyderabad:

When planning Kerala tour packages from Hyderabad, consider including Kumblangi in your itinerary. Many tour operators offer packages that combine visits to popular destinations like Kochi with the unique experience of Kumblangi. This allows you to enjoy the best of both worlds – the vibrant city life of Kochi and the tranquil village retreat of Kumblangi.

Conclusion: A Village of Tranquility

Kumblangi in Kochi is a hidden gem that invites travelers to step off the beaten path and immerse themselves in the authentic beauty of rural Kerala. It's a place where the rhythms of village life, the serenity of backwaters, and the warmth of local hospitality come together to create a memorable and peaceful retreat. For travelers from Hyderabad seeking a break from the urban grind, Kumblangi offers a tranquil haven where you can unwind, rejuvenate, and experience the true essence of Kerala's culture and natural beauty.

Kerala, often referred to as "God's Own Country," has long been a magnet for travelers from around the world. This southern Indian state boasts a diverse landscape that includes lush greenery, serene backwaters, pristine beaches, and a rich cultural heritage. In recent years, Kerala's tourism sector has witnessed a significant transformation with new innovations and an increasing flow of people from various places, particularly from Ahmedabad. In this blog post, we'll explore the exciting developments in Kerala's tourism industry and how it has been drawing visitors,

such as those seeking "Kerala Honeymoon Packages from Ahmedabad."


Sustainable Tourism Initiatives


One of the most noteworthy innovations in Kerala's tourism industry is its commitment to sustainable tourism. The state government has initiated several eco-friendly measures, such as promoting responsible tourism practices, banning single-use plastics, and supporting organic farming. These initiatives have not only preserved the natural beauty of the state but have also attracted eco-conscious travelers, including those from Ahmedabad.


Wellness Tourism and Ayurveda


Kerala has been a hub for wellness tourism for many years, thanks to its world-renowned Ayurvedic treatments. However, recent years have seen an upsurge in wellness centers, spas, and resorts offering holistic healing experiences. Ayurveda, yoga, and meditation retreats have gained immense popularity, making Kerala an appealing destination for travelers seeking rejuvenation and relaxation, including those interested in "Kerala Honeymoon Packages from Ahmedabad."


Adventure Tourism


Kerala's adventurous side is increasingly captivating thrill-seekers. Activities like trekking, bamboo rafting, rock climbing, and zip-lining have become popular among tourists. The state's lush Western Ghats offer numerous opportunities for adrenaline-pumping adventures, drawing adventure enthusiasts from places like Ahmedabad who crave more than just a typical vacation.


Enhanced Connectivity


Kerala has made significant improvements in its transportation infrastructure, making it easier for tourists to access the state. The expansion of airports, improved road networks, and the introduction of high-speed trains have made traveling to Kerala more convenient, particularly for those arriving from cities like Ahmedabad.


Culinary Experiences


Kerala's cuisine is a delectable fusion of flavors, with dishes like Kerala Sadya, Malabar Biryani, and seafood delicacies leaving an indelible mark on the palate. The state has also embraced culinary tourism, with cooking classes, food festivals, and farm-to-table experiences becoming popular attractions. Travelers, including those from Ahmedabad, are eager to savor the rich and diverse tastes of Kerala.


Unique Accommodation Options


Kerala's tourism industry has responded to the evolving preferences of travelers by offering unique accommodation choices. Treehouses amidst the rainforests, floating cottages on backwaters, and luxury houseboats provide memorable stays for visitors. These innovative lodging options cater to those seeking an immersive experience in Kerala's natural beauty, making it even more appealing for honeymooners from Ahmedabad.


Digital Marketing and Online Booking


The rise of digital marketing and online booking platforms has played a pivotal role in attracting tourists to Kerala. Tourism agencies and hospitality providers have leveraged technology to reach a global audience, making it effortless for travelers, including those searching for "Kerala Honeymoon Packages from Ahmedabad," to plan their trips and explore the region's offerings.


Conclusion


Kerala's tourism industry has witnessed a remarkable evolution, with innovations that cater to a diverse range of travelers. The state's commitment to sustainability, emphasis on wellness and adventure, improved connectivity, culinary experiences, unique accommodations, and digital marketing efforts have all contributed to the influx of visitors, including those from Ahmedabad. As Kerala continues to embrace new trends and experiences, it solidifies its position as a must-visit destination, appealing to honeymooners, nature lovers, adventurers, and wellness seekers alike. So, if you're considering a memorable vacation, don't miss the chance to explore "God's Own Country" and discover the magic of Kerala.

kandi 1-Click Install

Kerala, often referred to as "God's Own Country," is a land of enchanting natural beauty, rich cultural heritage, and diverse landscapes. From tranquil backwaters and pristine beaches to lush hill stations and vibrant cities, Kerala offers a treasure trove of experiences for travelers. Let's embark on a virtual journey through some of the best destinations that make Kerala trip packages truly extraordinary.


Munnar: The Verdan


Munnar, a picturesque hill station, is one of Kerala's most sought-after destinations. Known for its lush tea plantations, rolling hills, and cool climate, Munnar offers a serene escape from the bustling world. Visitors can explore tea gardens, trek through the Western Ghats, and witness breathtaking sunsets from the top of Anamudi, the highest peak in South India. Munnar is a must-visit destination for nature enthusiasts and those seeking a peaceful retreat.


Alleppey (Alappuzha): The Venice of the East


Alleppey, often called the "Venice of the East," is famous for its intricate network of backwaters, serene lagoons, and houseboat cruises. It's a paradise for those seeking a tranquil escape amidst the serene waters and lush landscapes. A Kerala trip package that includes Alleppey offers the opportunity to savor traditional Kerala cuisine, witness daily life along the waterways, and experience the unique charm of houseboat living.


Kochi (Cochin): A Blend of History and Modernity


Kochi, a bustling port city, seamlessly blends history and modernity. It boasts colonial-era architecture, vibrant markets, and a rich cultural heritage. The iconic Chinese fishing nets, the historic Mattancherry Palace, and the enchanting Jew Town are just a few of the city's attractions. Kochi is a gateway to the backwaters and a melting pot of cultures, making it an essential stop on any Kerala trip.


Wayanad: The Wilderness Escape


Wayanad, located in the Western Ghats, is a haven for nature lovers and adventure enthusiasts. It offers lush forests, wildlife sanctuaries, and a range of outdoor activities like trekking, wildlife safaris, and camping. Visitors can explore attractions like Edakkal Caves, Chembra Peak, and Banasura Sagar Dam. Wayanad's untouched natural beauty and serene ambiance make it an ideal destination for an offbeat Kerala trip package

.

Thekkady: Wildlife and Spice Plantations


Thekkady is home to the famous Periyar National Park, known for its diverse wildlife and scenic beauty. A Kerala trip to Thekkady offers the chance to go on jungle safaris, boat rides on Periyar Lake, and spice plantation tours. It's a destination where travelers can immerse themselves in nature and wildlife while enjoying the aroma of spices in the air.


Kumarakom: The Backwater Bliss


Kumarakom, situated on the banks of Vembanad Lake, is an idyllic backwater destination known for its lush greenery and tranquil waters. Visitors can explore the intricate labyrinth of canals, relax at luxurious lakeside resorts, and witness exotic bird species at the Kumarakom Bird Sanctuary. Kumarakom is an oasis of serenity and a perfect addition to any Kerala trip package.


Kovalam: Beach Bliss and Ayurveda


Kovalam, with its crescent-shaped beaches and picturesque cliffs, is a popular beach destination in Kerala. It offers opportunities for sunbathing, water sports, and rejuvenating Ayurvedic treatments. The lighthouse at Kovalam Beach provides panoramic views of the Arabian Sea. It's an ideal destination for travelers seeking sun, sea, and relaxation on their Kerala trip.


Varkala: Cliffside Charm


Varkala, located along the stunning cliffs of the Arabian Sea, offers a unique beach experience. The mineral-rich waters of Varkala are believed to have therapeutic properties. Visitors can relax on the cliffside promenade, take in panoramic ocean views, and visit the ancient Janardanaswamy Temple. Varkala provides a laid-back and rejuvenating coastal experience.


Palakkad: The Gateway to Kerala's Culture


Palakkad, often referred to as the "Gateway of Kerala," offers a blend of culture, history, and natural beauty. It's known for its ancient temples, serene dams, and lush green landscapes. The Palakkad Fort, Malampuzha Gardens, and Silent Valley National Park are notable attractions. Palakkad provides a glimpse into Kerala's rich cultural heritage and biodiversity.


Kannur: Pristine Beaches and Heritage


Kannur, on the northern coast of Kerala, is a destination for travelers seeking pristine beaches, historical sites, and rich traditions. The St. Angelo Fort, Muzhappilangad Beach (the longest drive-in beach in India), and Theyyam performances are highlights of a Kerala trip to Kannur. It's an offbeat destination that showcases Kerala's diverse cultural and natural beauty.


Conclusion


Kerala, with its diverse landscapes and cultural richness, offers an array of experiences for travelers. Whether you're drawn to the misty hills of Munnar, the serene backwaters of Alleppey, or the vibrant streets of Kochi, Kerala has something to offer everyone. These destinations, each unique in its own way, are the pillars of Kerala's tourism map, enticing visitors from around the world to explore the magic of "God's Own Country." So, set your compass, plan your Kerala trip package, and get ready for a journey through a land where nature, culture, and serenity coexist in perfect harmony.

When it comes to enchanting honeymoon destinations, Kerala is second to none. Known for its picturesque landscapes, serene backwaters, and lush greenery, this south Indian state offers couples an idyllic setting for a memorable honeymoon. Among the many jewels in Kerala's crown, Vembanad Kayal (Vembanad Lake) stands out as a romantic paradise that beckons newlyweds seeking a unique and unforgettable experience.

The Beauty of Vembanad Kayal:

Vembanad Kayal, often referred to as Vembanad Lake, is the largest lake in Kerala and one of the longest in India. Stretching over 96 kilometers, this vast expanse of pristine backwaters is fringed with coconut palms, lush paddy fields, and quaint villages. The lake is renowned for its tranquil waters, making it an ideal destination for couples looking for a peaceful and romantic escape.

Houseboats: Floating Romance on Vembanad Kayal:

One of the most iconic features of Vembanad Kayal is the traditional Kerala houseboat. These beautifully crafted vessels offer a unique and intimate way to explore the lake's scenic beauty. Honeymooners can embark on a private houseboat cruise, complete with a personal chef and crew, ensuring that your journey is both luxurious and exclusive.

Imagine drifting along the calm waters of Vembanad Kayal with your loved one, surrounded by the breathtaking views of the backwaters. As the sun sets, painting the sky with hues of orange and pink, you can savor a delicious Kerala meal prepared just for you. It's a romantic experience that will stay etched in your memory forever.

Vembanad Kayal Activities for Honeymooners:

Apart from houseboat cruises, Vembanad Kayal offers a range of activities that honeymooners can enjoy together:

  1. Birdwatching: The lake is a haven for birdwatchers, with numerous resident and migratory bird species. Share moments of awe as you spot colorful kingfishers, graceful herons, and perhaps even a majestic eagle.
  2. Nature Walks: Take leisurely strolls along the lakeshore or explore the surrounding villages hand in hand. The lush greenery and the soothing sounds of nature provide the perfect backdrop for romantic conversations.
  3. Fishing: Try your hand at traditional Kerala fishing techniques with your partner. It's not just about the catch but also about the shared experience and a chance to bond.
  4. Village Visits: Immerse yourselves in the local culture by visiting nearby villages. Interact with the friendly villagers, learn about their traditions, and savor authentic Kerala cuisine.
  5. Sunset Romance: Witnessing the sunset over Vembanad Kayal is a magical experience. The changing colors of the sky and the serene waters create a romantic ambiance that is simply unforgettable.

Kerala Honeymoon Packages and Vembanad Kayal:

Many Kerala honeymoon packages include a visit to Vembanad Kayal, ensuring that you get to experience this romantic paradise. Whether you're looking for adventure, relaxation, or simply a private moment with your partner, Vembanad Kayal has it all.

Vembanad Kayal, with its serene waters and lush surroundings, offers honeymooners the perfect backdrop for creating cherished memories. So, if you're planning your honeymoon in Kerala, consider including Vembanad Kayal in your itinerary, and let this romantic destination be the canvas for your love story.

Kerala, often referred to as "God's Own Country," is a place of stunning natural beauty, lush landscapes, and a unique cultural heritage. Among its many attractions, the tranquil backwaters that weave through the state stand out as a must-visit destination. These serene waterways provide more than just a scenic experience; they offer a chance to engage in the time-honored tradition of fishing. Kerala houseboat packages provide the perfect opportunity to combine this cultural experience with the comforts of modern living.

The Backwaters of Kerala: A Natural Wonder

The backwaters of Kerala are a vast network of interconnected rivers, lakes, and canals that traverse the state, forming a unique and enchanting ecosystem. Surrounded by swaying palms, vibrant paddy fields, and quaint villages, the backwaters are a sight to behold. They not only serve as a lifeline for the local communities but also offer a tranquil escape for travelers seeking solace in nature's embrace.

Kerala Houseboats: Your Floating Home

Houseboats, locally known as "Kettuvallam," are an integral part of the backwater experience. These traditional wooden vessels, once used for transporting rice and spices, have been transformed into luxurious floating abodes. Kerala houseboat packages allow you to step aboard these beautifully crafted houseboats, complete with modern amenities, spacious bedrooms, and a dedicated crew.

As you embark on your houseboat adventure, you'll find yourself surrounded by the soothing sounds of water lapping against the boat, the scent of fresh air, and the gentle swaying of the vessel. It's an immersive experience that allows you to disconnect from the hustle and bustle of everyday life and reconnect with the rhythms of nature.

Fishing in Kerala Houseboats: A Cultural Experience

One of the most enchanting aspects of a Kerala houseboat journey is the opportunity to engage in traditional fishing activities. Fishing has been a way of life for the communities living along the backwaters for generations, and it's a cultural practice deeply embedded in Kerala's heritage.

Types of Fishing in Kerala Houseboats:

  1. Rod and Line Fishing: This is the most common form of fishing you'll experience on a houseboat. Armed with a simple fishing rod and bait, you can try your hand at catching a variety of local fish species. The crew on the houseboat will guide you through the process, making it suitable for both beginners and experienced anglers.
  2. Chinese Fishing Nets: In some areas, you might encounter the iconic Chinese fishing nets, a traditional method of catching fish that has been practiced in Kerala for centuries. While you may not directly participate in using these massive nets, you can observe the skilled local fishermen in action and learn about their techniques.

The Joy of Catching Your Own Meal:

One of the most rewarding aspects of fishing in Kerala houseboats is the opportunity to catch your own meal. There's a unique sense of satisfaction in reeling in a fish and knowing that it will be prepared and served to you fresh by the onboard chef. It's a culinary adventure that connects you to the local flavors and traditions of Kerala.

The Bounty of Kerala's Waters:

Kerala's backwaters are home to a diverse range of fish, including the popular Karimeen (pearl spot fish), Tilapia, and Catfish, among others. These freshwater delicacies are known for their tender flesh and delicious taste, making them a prized catch for anglers and a delightful treat for your taste buds.

The Art of Patience:

Fishing in Kerala houseboats is not just about the catch; it's also about the journey. It's an opportunity to slow down, appreciate the beauty of the surroundings, and engage in meaningful conversations with your travel companions. As you wait for that telltale tug on your line, you'll find that patience is indeed a virtue, and the rewards are well worth the wait.

Sustainability and Conservation:

Kerala has made significant efforts to promote sustainable and responsible fishing practices in the backwaters. This ensures that the delicate ecosystem of the backwaters remains balanced and that future generations can continue to enjoy its beauty.

Kerala Houseboat Packages: A Unique Experience

Kerala houseboat packages are designed to offer travelers a harmonious blend of traditional culture and modern comfort. While you can indulge in the timeless practice of fishing, you can also relax in the well-appointed interiors of your houseboat. Enjoy sumptuous Kerala cuisine prepared by skilled chefs using the freshest local ingredients. The dining experience on a houseboat is a culinary journey in itself, with flavors that will leave you craving for more.

Conclusion: A Memorable Journey

Fishing in Kerala houseboats is not just an activity; it's an immersive cultural experience that allows you to connect with the traditions and natural beauty of Kerala. It's a journey that combines the thrill of fishing with the tranquility of the backwaters, creating lasting memories of your visit to "God's Own Country." So, if you're seeking a unique and enriching travel experience, consider including a Kerala houseboat package in your itinerary and cast your line into the serene waters of this magical destination.

Kerala, known as "God's Own Country," is a land of enchanting beauty, diverse landscapes, and a rich cultural heritage. It's no wonder that Kerala tour packages have gained immense popularity among travelers seeking a blend of natural wonders, cultural experiences, and relaxation. Let's embark on a virtual journey to explore the amazing Kerala tour packages that offer an unforgettable adventure in this stunning South Indian state.


Backwater Bliss: Alleppey Houseboat Packages


One of the most iconic experiences in Kerala is cruising through its tranquil backwaters in a traditional houseboat. Alleppey, often called the "Venice of the East," is the epicenter of houseboat tourism. Alleppey houseboat packages offer travelers the chance to drift along serene lagoons, meandering canals, and lush paddy fields. These floating marvels provide a unique opportunity to savor traditional Kerala cuisine, witness daily life along the waterways, and enjoy the tranquility of the backwaters.


Hill Station Hideaway: Munnar Tour Packages


Munnar, a picturesque hill station nestled in the Western Ghats, is a haven for nature enthusiasts. Munnar tour packages take you through rolling hills covered in tea plantations, lush green valleys, and pristine waterfalls. Visitors can explore tea gardens, trek through the hills, and witness breathtaking sunsets from the highest peak in South India, Anamudi. Munnar offers the perfect escape from the hustle and bustle of city life.


Cultural Odyssey: Kochi (Cochin) Exploration


Kochi, a bustling port city, is a cultural melting pot where history and modernity coexist harmoniously. Kochi tour packages allow travelers to explore colonial-era architecture, vibrant markets, and rich cultural heritage. Iconic attractions like the Chinese fishing nets, the historic Mattancherry Palace, and the enchanting Jew Town offer a glimpse into the city's diverse influences and historical significance.


Wildlife and Adventure: Thekkady Packages


Thekkady, home to the famous Periyar National Park, is a destination for wildlife enthusiasts and adventure seekers. Thekkady packages offer jungle safaris, boat rides on Periyar Lake, and opportunities to explore spice plantations. Visitors can immerse themselves in nature, spot diverse wildlife, and enjoy the aroma of spices in the air. Thekkady is where the wild meets the serene.


Serenity by the Sea: Kovalam Beach Packages


Kovalam, with its crescent-shaped beaches and picturesque cliffs, is a popular beach destination in Kerala. Kovalam beach packages provide opportunities for sunbathing, water sports, and rejuvenating Ayurvedic treatments. The iconic lighthouse at Kovalam Beach offers panoramic views of the Arabian Sea. Kovalam is an ideal destination for travelers seeking sun, sea, and relaxation.


Pristine Beach Escapes: Varkala Getaways


Varkala, located along stunning cliffs overlooking the Arabian Sea, offers a unique beach experience. Varkala tour packages allow visitors to relax on the cliffside promenade, take in panoramic ocean views, and experience the therapeutic properties of the mineral-rich waters. The ancient Janardanaswamy Temple adds a touch of spirituality to this coastal paradise.


Offbeat Beauty: Wayanad Expeditions


Wayanad, located in the Western Ghats, is an offbeat destination known for its untouched natural beauty and wilderness. Wayanad tour packages offer lush forests, wildlife sanctuaries, and outdoor activities like trekking, wildlife safaris, and camping. Travelers can explore attractions like Edakkal Caves, Chembra Peak, and Banasura Sagar Dam. Wayanad is a hidden gem for those seeking an adventurous escape.


Backwaters and Birdlife: Kumarakom Retreats


Kumarakom, situated on the banks of Vembanad Lake, is an idyllic backwater destination known for its lush greenery and tranquil waters. Kumarakom tour packages provide the opportunity to explore the intricate labyrinth of canals, relax at luxurious lakeside resorts, and witness exotic bird species at the Kumarakom Bird Sanctuary. Kumarakom is an oasis of serenity.


Cultural Immersion: Kannur Cultural Experiences


Kannur, on the northern coast of Kerala, offers a rich cultural experience for travelers seeking historical sites and traditions. Kannur tour packages allow visitors to explore the St. Angelo Fort, enjoy the longest drive-in beach in India at Muzhappilangad Beach, and witness the vibrant Theyyam performances. Kannur showcases Kerala's diverse cultural and natural beauty.

Gateway to Kerala: Palakkad Excursions

Palakkad, often referred to as the "Gateway of Kerala," offers a blend of culture, history, and natural beauty.

Kerala, with its lush green landscapes, serene backwaters, and vibrant culture, is a treasure trove of natural wonders and unique experiences. Among its many captivating destinations, Munnar stands out as a picturesque hill station that has enchanted travelers for generations. While Munnar is famous for its tea plantations and scenic vistas, there's another adventure that adds a touch of wild charm to your Kerala tour packages – elephant safaris.

Munnar: The Jewel of Kerala

Nestled in the Western Ghats, Munnar is a hill station renowned for its rolling hills, mist-covered valleys, and emerald-green tea gardens. It's a place where nature reveals its most enchanting facets, making it a must-visit destination for travelers seeking a tranquil escape from the bustling world.

Elephant Safaris: A Unique Experience

One of the most distinctive features of Munnar's tourism scene is the opportunity to embark on elephant safaris. These gentle giants have been an integral part of Kerala's cultural heritage and have played various roles in the state's history, from labor to transportation. Today, they offer travelers an unforgettable way to explore the scenic beauty of Munnar.

A Majestic Ride:

Picture yourself seated atop an awe-inspiring elephant, gently swaying as it strides through the lush forests and tea plantations of Munnar. The elevated vantage point provides you with uninterrupted panoramic views of the surrounding landscape, and the experience is both thrilling and serene.

Exploring Tea Plantations:

Munnar is renowned for its tea estates that stretch across acres of pristine land. On an elephant safari, you can venture into these plantations, witnessing the meticulous process of tea cultivation up close. The fragrant aroma of tea leaves fills the air as you traverse the rolling hills, creating a sensory delight that's unique to Munnar.

Tranquil Nature Trails:

Elephant safaris take you on tranquil nature trails that are inaccessible by conventional means. The soothing sounds of nature, the melodious calls of birds, and the rustling of leaves create a symphony that accompanies you on your journey. It's a chance to immerse yourself fully in the serene beauty of Munnar.

Wildlife Encounters:

Munnar is home to a variety of wildlife, and while on an elephant safari, you may have the opportunity to spot some of these creatures in their natural habitat. From sambar deer to langur monkeys, the forests of Munnar are teeming with fascinating species.

Interaction with Elephants:

The elephant mahouts, or caretakers, are often happy to share their knowledge and stories about these magnificent animals. You can learn about the elephants' personalities, habits, and their role in Kerala's culture and daily life.

Responsible Tourism:

As you enjoy your elephant safari in Munnar, it's essential to choose tour operators that prioritize the welfare of their elephants. Responsible tourism ensures that the animals are treated with care, provided with proper nutrition and shelter, and not overworked.

Inclusion in Kerala Tour Packages:

Many Kerala tour packages include elephant safaris as part of their itineraries. Whether you're a nature enthusiast, a wildlife lover, or simply seeking a unique and memorable experience, adding an elephant safari in Munnar to your Kerala tour is an excellent choice.

Conclusion: A Memorable Journey with Elephants

Munnar's elephant safaris offer travelers a rare opportunity to connect with nature and these gentle giants in an authentic and unforgettable way. It's an adventure that combines the thrill of wildlife encounters with the serenity of nature trails, all while perched atop a majestic elephant.

So, when you plan your Kerala tour packages, consider including Munnar in your itinerary and take a ride on the wild side with an elephant safari. Let the beauty of Munnar and the gentle spirit of these remarkable creatures create lasting memories of your visit to this enchanting hill station in Kerala.

Trending Discussions on Build Tool

Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows

RCT-Folly error when using hermes with iOS

Getting wix toolset not installed error in azure devops upon building wixproj

Android Studio Disconnects From Physical Device

How to hack conda for Anaconda3 Python to ignore package dependencies? Modified conda-meta package JSON depends flag, but it's not enough

unable to install pyodbc using python 3.10 in windows 10

How to register QObject class in CMake with qt_add_qml_module?

Flutter does not include Native Debug Symbols

The function pointer is changing its own address

Running into an error when trying to pip install python-docx

QUESTION

Could NOT find Boost (missing: python3) (found version "1.76.0") - CMake Windows

Asked 2022-Mar-30 at 15:49

I need help solving this cmake boost python3 find problem when trying to compile cv_bridge from ros2, which uses a build tool called colcon and in turn CMake. The colcon build error message:

1> colcon build --symlink-install --merge-install
2...    
3--- stderr: cv_bridge
4    CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5      Could NOT find Boost (missing: python3) (found version "1.76.0")
6    Call Stack (most recent call first):
7      C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8      C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9      CMakeLists.txt:32 (find_package)
10

What I have tried:

  • Installing different versions of boost: 1.58, 1.67, 1.76
  • Adding to Boost_INCLUDE_DIRS the path to the boost libraries in the CMakeLists.txt of cv_bridge:
1> colcon build --symlink-install --merge-install
2...    
3--- stderr: cv_bridge
4    CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5      Could NOT find Boost (missing: python3) (found version "1.76.0")
6    Call Stack (most recent call first):
7      C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8      C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9      CMakeLists.txt:32 (find_package)
10     if(NOT ANDROID)
11          find_package(PythonLibs)
12          list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0")
13          list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0/stage/lib")
14
  • Renaming the libboost_python38-vc142-mt-gd-x64-1_76.lib to libboost_python38.lib and libboost_python3.lib
  • Compiling Boost from source with bootstrap.bat and b2 or installing with the zip file.
  • Looked for answers here and elsewhere, which led me to tried things above

I have run out of ideas, please any help will be greatly appreciated!

ANSWER

Answered 2021-Dec-08 at 13:20

I was able to solve it (after a few days of suffering) using precompiled Boost 1.74 and by changing the boost/python related parts of cv_bridge/CMakeLists.txt to:

1> colcon build --symlink-install --merge-install
2...    
3--- stderr: cv_bridge
4    CMake Error at C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
5      Could NOT find Boost (missing: python3) (found version "1.76.0")
6    Call Stack (most recent call first):
7      C:/Program Files/CMake/share/cmake-3.22/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE)
8      C:/Program Files/CMake/share/cmake-3.22/Modules/FindBoost.cmake:2360 (find_package_handle_standard_args)
9      CMakeLists.txt:32 (find_package)
10     if(NOT ANDROID)
11          find_package(PythonLibs)
12          list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0")
13          list(APPEND Boost_INCLUDE_DIRS "C:/Program Files/boost/boost_1_76_0/stage/lib")
14...
15set(BOOST_ROOT <your/path/to/boost_1_74_0>)
16
17find_package (Python3 REQUIRED COMPONENTS Interpreter Development)
18if(NOT ANDROID)
19    find_package(Boost QUIET)
20    if(Boost_VERSION LESS 106500)
21        find_package(Boost REQUIRED python)
22    else()
23        # This is a bit of a hack to suppress a warning
24        #   No header defined for python3; skipping header check
25        # Which should only affect Boost versions < 1.67
26        # Resolution for newer versions:
27        #  https://gitlab.kitware.com/cmake/cmake/issues/16391
28        if (Boost_VERSION LESS 106700)
29            set(_Boost_PYTHON3_HEADERS "boost/python.hpp")
30        endif()
31        find_package(Boost COMPONENTS python${Python3_VERSION_MAJOR}.${Python3_VERSION_MINOR} REQUIRED)
32    endif()
33else()
34    find_package(Boost REQUIRED)
35endif()
36find_package(sensor_msgs REQUIRED)
37...
38

Do not forget to remove build and install folders before triggering colcon build again.

Source https://stackoverflow.com/questions/69910958

QUESTION

RCT-Folly error when using hermes with iOS

Asked 2022-Mar-20 at 03:32

When enabling hermes in the Podfile and rebuilding the build it fails due to RCT-Folly. No idea what it does.

To re-initialise everything I use the following:

rm -rf node_modules && rm package-lock.json && npm install && cd ios && rm -rf Pods && rm Podfile.lock && pod deintegrate && pod setup && pod install && cd ..

I also start the metro bundler with:

npx react-native --reset-cache

Anyone has a solution?

The app uses react-native v0.64 and we want to have a better performance using hermes.

All information:

ios/Podfile

1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6  config = use_native_modules!
7  use_react_native!(
8    :path => config[:reactNativePath],
9    :hermes_enabled => true
10  )
11
12  permissions_path = '../node_modules/react-native-permissions/ios'
13  pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14  pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16  pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17  pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18  pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19  pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20  pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21  pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22  pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24  pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25  pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26  pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27  pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28  pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32  # add the Firebase pod for Google Analytics
33  pod 'Firebase/Analytics'
34  # add pods for any other desired Firebase products
35  # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38  target 'unblndTests' do
39    inherit! :complete
40    # Pods for testing
41  end
42  # Enables Flipper.
43  #
44  # Note that if you have use_frameworks! enabled, Flipper will not work and
45  # you should disable these next few lines.
46  # flipper_pods()
47  # post_install do |installer|
48  #  flipper_post_install(installer)
49  # end
50end
51

Terminal Output

1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6  config = use_native_modules!
7  use_react_native!(
8    :path => config[:reactNativePath],
9    :hermes_enabled => true
10  )
11
12  permissions_path = '../node_modules/react-native-permissions/ios'
13  pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14  pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16  pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17  pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18  pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19  pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20  pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21  pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22  pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24  pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25  pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26  pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27  pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28  pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32  # add the Firebase pod for Google Analytics
33  pod 'Firebase/Analytics'
34  # add pods for any other desired Firebase products
35  # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38  target 'unblndTests' do
39    inherit! :complete
40    # Pods for testing
41  end
42  # Enables Flipper.
43  #
44  # Note that if you have use_frameworks! enabled, Flipper will not work and
45  # you should disable these next few lines.
46  # flipper_pods()
47  # post_install do |installer|
48  #  flipper_post_install(installer)
49  # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52    atomic_notify_one(state);
53    ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54    wakeTimedWaiters(&state_, proxy.timedWaiters_);
55    ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56     ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63    cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64    export LANG\=en_US.US-ASCII
65    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed:    CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73

npx react-native info

1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6  config = use_native_modules!
7  use_react_native!(
8    :path => config[:reactNativePath],
9    :hermes_enabled => true
10  )
11
12  permissions_path = '../node_modules/react-native-permissions/ios'
13  pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14  pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16  pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17  pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18  pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19  pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20  pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21  pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22  pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24  pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25  pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26  pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27  pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28  pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32  # add the Firebase pod for Google Analytics
33  pod 'Firebase/Analytics'
34  # add pods for any other desired Firebase products
35  # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38  target 'unblndTests' do
39    inherit! :complete
40    # Pods for testing
41  end
42  # Enables Flipper.
43  #
44  # Note that if you have use_frameworks! enabled, Flipper will not work and
45  # you should disable these next few lines.
46  # flipper_pods()
47  # post_install do |installer|
48  #  flipper_post_install(installer)
49  # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52    atomic_notify_one(state);
53    ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54    wakeTimedWaiters(&state_, proxy.timedWaiters_);
55    ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56     ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63    cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64    export LANG\=en_US.US-ASCII
65    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed:    CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73System:
74    OS: macOS 11.4
75    CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
76    Memory: 1.05 GB / 16.00 GB
77    Shell: 5.8 - /bin/zsh
78  Binaries:
79    Node: 14.17.0 - /usr/local/bin/node
80    Yarn: Not Found
81    npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
82    Watchman: 4.9.0 - /usr/local/bin/watchman
83  Managers:
84    CocoaPods: 1.10.1 - /usr/local/bin/pod
85  SDKs:
86    iOS SDK:
87      Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
88    Android SDK:
89      API Levels: 28, 29
90      Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
91      System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
92      Android NDK: Not Found
93  IDEs:
94    Android Studio: 4.2 AI-202.7660.26.42.7351085
95    Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
96  Languages:
97    Java: 1.8.0_265 - /usr/bin/javac
98  npmPackages:
99    @react-native-community/cli: Not Found
100    react: 17.0.1 => 17.0.1 
101    react-native: 0.64.2 => 0.64.2 
102    react-native-macos: Not Found
103  npmGlobalPackages:
104    *react-native*: Not Found
105

ANSWER

Answered 2021-Jul-23 at 16:11

After lots of trial and error I found a working solution. It's a bit strange, but I had to enable Flipper. I did not find a way without it.

Thanks to this answer: https://github.com/facebook/react-native/issues/31179#issuecomment-831932941 I found out about fixing Pods.

This is my Podfile now:

1require_relative '../node_modules/react-native/scripts/react_native_pods'
2require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3platform :ios, '10.0'
4
5target 'unblnd' do
6  config = use_native_modules!
7  use_react_native!(
8    :path => config[:reactNativePath],
9    :hermes_enabled => true
10  )
11
12  permissions_path = '../node_modules/react-native-permissions/ios'
13  pod 'Permission-BluetoothPeripheral', :path => "#{permissions_path}/BluetoothPeripheral"
14  pod 'Permission-Calendars', :path => "#{permissions_path}/Calendars"
15  pod 'Permission-Camera', :path => "#{permissions_path}/Camera"
16  pod 'Permission-Contacts', :path => "#{permissions_path}/Contacts"
17  pod 'Permission-FaceID', :path => "#{permissions_path}/FaceID"
18  pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways"
19  pod 'Permission-LocationWhenInUse', :path => "#{permissions_path}/LocationWhenInUse"
20  pod 'Permission-MediaLibrary', :path => "#{permissions_path}/MediaLibrary"
21  pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone"
22  pod 'Permission-Motion', :path => "#{permissions_path}/Motion"
23  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications"
24  pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary"
25  pod 'Permission-Reminders', :path => "#{permissions_path}/Reminders"
26  pod 'Permission-Siri', :path => "#{permissions_path}/Siri"
27  pod 'Permission-SpeechRecognition', :path => "#{permissions_path}/SpeechRecognition"
28  pod 'Permission-StoreKit', :path => "#{permissions_path}/StoreKit"
29
30  pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
31
32  # add the Firebase pod for Google Analytics
33  pod 'Firebase/Analytics'
34  # add pods for any other desired Firebase products
35  # https://firebase.google.com/docs/ios/setup#available-pods
36
37
38  target 'unblndTests' do
39    inherit! :complete
40    # Pods for testing
41  end
42  # Enables Flipper.
43  #
44  # Note that if you have use_frameworks! enabled, Flipper will not work and
45  # you should disable these next few lines.
46  # flipper_pods()
47  # post_install do |installer|
48  #  flipper_post_install(installer)
49  # end
50end
51In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:352: /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1051:5: error: 'atomic_notify_one<unsigned long>' is unavailable
52    atomic_notify_one(state);
53    ^ /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h:1573:5: note: in instantiation of function template specialization 'folly::detail::distributed_mutex::wakeTimedWaiters<std::__1::atomic<unsigned long>>' requested here
54    wakeTimedWaiters(&state_, proxy.timedWaiters_);
55    ^ In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp:17: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex.h:19: In file included from /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/Headers/Private/RCT-Folly/folly/Optional.h:58: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/functional:504: In file included from /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/memory:681: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator14.5.sdk/usr/include/c++/v1/atomic:2140:6: note: 'atomic_notify_one<unsigned long>' has been explicitly marked unavailable here void atomic_notify_one(atomic<_Tp>* __o) _NOEXCEPT
56     ^ 1 error generated.
57
58CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Demangle-3c4c6b43c285d16c32230d6f0a7a76ce5af39228ed5c3beeaf7ed7d1344f76b0.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/detail/Demangle.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
59
60...
61
62CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/Cursor.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/io/Cursor.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (in target 'RCT-Folly' from project 'Pods')
63    cd /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods
64    export LANG\=en_US.US-ASCII
65    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
66
67...
68
69** BUILD FAILED **
70
71
72The following build commands failed:    CompileC /Users/adriaandebolle/Library/Developer/Xcode/DerivedData/unblnd-cvaavakypguqqzftojmgjqbtdeij/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/RCT-Folly.build/Objects-normal/x86_64/DistributedMutex.o /Users/adriaandebolle/htdocs/unblnd_app/ios/Pods/RCT-Folly/folly/synchronization/DistributedMutex.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler (1 failure)
73System:
74    OS: macOS 11.4
75    CPU: (8) x64 Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz
76    Memory: 1.05 GB / 16.00 GB
77    Shell: 5.8 - /bin/zsh
78  Binaries:
79    Node: 14.17.0 - /usr/local/bin/node
80    Yarn: Not Found
81    npm: 6.14.13 - ~/htdocs/unblnd_app/node_modules/.bin/npm
82    Watchman: 4.9.0 - /usr/local/bin/watchman
83  Managers:
84    CocoaPods: 1.10.1 - /usr/local/bin/pod
85  SDKs:
86    iOS SDK:
87      Platforms: iOS 14.5, DriverKit 20.4, macOS 11.3, tvOS 14.5, watchOS 7.4
88    Android SDK:
89      API Levels: 28, 29
90      Build Tools: 28.0.3, 29.0.2, 29.0.3, 30.0.2
91      System Images: android-29 | Intel x86 Atom_64, android-29 | Google APIs Intel x86 Atom
92      Android NDK: Not Found
93  IDEs:
94    Android Studio: 4.2 AI-202.7660.26.42.7351085
95    Xcode: 12.5.1/12E507 - /usr/bin/xcodebuild
96  Languages:
97    Java: 1.8.0_265 - /usr/bin/javac
98  npmPackages:
99    @react-native-community/cli: Not Found
100    react: 17.0.1 => 17.0.1 
101    react-native: 0.64.2 => 0.64.2 
102    react-native-macos: Not Found
103  npmGlobalPackages:
104    *react-native*: Not Found
105  ...
106
107  # Enables Flipper.
108  #
109  # Note that if you have use_frameworks! enabled, Flipper will not work and
110  # you should disable these next few lines.
111  use_flipper!({ 'Flipper' => '0.87' })
112  post_install do |installer|
113    flipper_post_install(installer)
114
115    find_and_replace("Pods/Headers/Private/RCT-Folly/folly/synchronization/DistributedMutex-inl.h",
116    "atomic_notify_one(state)", "folly::atomic_notify_one(state)")
117
118    find_and_replace("Pods/Flipper-Folly/folly/synchronization/DistributedMutex-inl.h",
119    "atomic_wait_until(&state, previous | data, deadline)", "folly::atomic_wait_until(&state, previous | data, deadline)")
120  end
121
122  ...
123

Source https://stackoverflow.com/questions/68497865

QUESTION

Getting wix toolset not installed error in azure devops upon building wixproj

Asked 2022-Mar-09 at 18:58

I am creating an MSI installer with Wix and wrote a task in the azure DevOps pipeline which builds the MSI solution file using MSBuild. When the code is pushed to remote the pipeline runs the task but my task returns the error saying WiX toolset is not installed hence the build fails. Though it is assured that the MSBuild task works as it is building other projects in the solution.

1##[error]Process 'MSBuild.exe' exited with code '1'.
2##[error][Path to wixproj](44,5): Error : The WiX Toolset v3.11 (or newer) build tools must be installed to build this project. To download the WiX Toolset, see http://wixtoolset.org/releases/
3

Is there any way to install Wix toolset using pipeline? Or any workaround which might help?

Please note that I am using a custom job pool if that might be a cause for this issue.

ANSWER

Answered 2022-Mar-09 at 18:02

Check this article from the official wix documentation.

Source https://stackoverflow.com/questions/71406387

QUESTION

Android Studio Disconnects From Physical Device

Asked 2022-Mar-06 at 15:11

Android Studio Bumblebee (2021.1.1) was released stably on 25 January 2022 bundled with a new Device Manager (accompanying new support for Android 11+ device debugging over WIFI). I jumped on this stable release, updating from Android Studio Arctic Fox (2020.3.1 Patch 4).

Unfortunately however, since updating, physical devices/handsets don't remain connected to Android Studio for the purpose of debugging. I can confirm that the issue was introduced from Android Studio Bumblebee onwards (occurring in Beta and Canary builds also). I've reproduced the issue on Android Studio Bumblebee (Stable), Chipmunk (Beta), and Dolphin (Canary), but Android Studio Arctic Fox (superseded Stable) continues to work just fine.

The issue occurs soon after opening Android Studio (Bumblebee+) with one of my physical devices connected. Everything appears fine initially and I may even have enough time to deploy my project to the handset, before the device disappears from Android Studio (as if I'd physically disconnected the USB cable from my computer or from the handset itself).

I've tried a fair few things in an attempt to determine a root cause. These include testing:

  • With different USB cables.
  • With different handsets (both varying makes and models).
  • With various versions of the Android Studio IDE (as mentioned above).
  • Plugging the USB cables into different USB ports on my computer.
  • Rebooting handsets and my computer.
  • Restarting Android Studio.
  • Invalidating caches and restarting Android Studio.
  • adb kill-server then adb start-server.
  • Revoking/reaccepting USB debugging authorization.
  • Reinstalled build tools/platform tools, and ADB.
  • A great number of further possibilities, to no avail.

I searched and read through remotely similar issues, including (but not limited to) these:

This particular comment in one of the above issues clued me onto a possible root cause:

I have been fighting for a few days with adb not seeing my device. After trying many other posted solutions, I discovered that the issue was with Chrome also trying to connect its debugger to a web view. If Chrome is connected using chrome://inspect, then adb seems to disconnect. Quitting Chrome resolves the issue. Then I can connect with Android Studio and then restart Chrome and reconnect. Hope this helps someone else.

However I've been unable to do anything with the above discovery, other than close Google Chrome, and hope for the best. Obviously this isn't an ideal solution. It appears as though the moment Google Chrome shows the connected physical device in the chrome://inspect/#devices page, the physical device promptly becomes unavailable through Android Studio.

I've jumped back to Android Studio Arctic Fox (2020.3.1 Patch 4) for the moment, however this brings with it other issues (my current core project targets the latest SDK version, which requires the updated IDE).

Absolutely any help with this would be insanely appreciated. I've exhausted just about every avenue that I can think of!

ANSWER

Answered 2022-Feb-01 at 17:29

I solved the problem by disabling

Settings -> Build, Execution, Deployment -> Debugger -> "Enable adb mDNS for wireless debugging"

Source https://stackoverflow.com/questions/70936120

QUESTION

How to hack conda for Anaconda3 Python to ignore package dependencies? Modified conda-meta package JSON depends flag, but it's not enough

Asked 2022-Mar-03 at 23:39

Alright I have a package Pythran which is a Python to C++ (PYD module) complier. The package itself on conda-forge says it requires clang and clangxx. BUT I have MS Build Tools clang-12 already installed, so these packages are not used at all.

Now every time I go to conda install [package_name] it tells me my environment is inconsistent, because I force removed the clang libraries I don't need (or want) via a:

1conda remove clang clangxx clang-13 --force
2

So I looked around a bit at the installation of things. And I found that there is a \Anaconda3\conda-meta\pythran-0.11.0-py39h832f523_0.json (note the name after the version changes)...

So I opened that file up, scrolled down to:

1conda remove clang clangxx clang-13 --force
2 "depends": [
3    "beniget 0.4.*",
4    "decorator",
5    "gast 0.5.*",
6    "numpy >=1.19.5,<2.0a0",
7    "ply >=3.4",
8    "python >=3.9,<3.10.0a0",
9    "python_abi 3.9.* *_cp39",
10    "xsimd >=8.0.5,<8.1"
11  ],
12

Which had these entries, which I manually removed:

1conda remove clang clangxx clang-13 --force
2 "depends": [
3    "beniget 0.4.*",
4    "decorator",
5    "gast 0.5.*",
6    "numpy >=1.19.5,<2.0a0",
7    "ply >=3.4",
8    "python >=3.9,<3.10.0a0",
9    "python_abi 3.9.* *_cp39",
10    "xsimd >=8.0.5,<8.1"
11  ],
12"clang",
13"clangxx",
14

So now when I go to run conda it doesn't say my environment is inconsistent anymore. However, when I try to add a package, it insists on installing clang, clang-13, clangxx.

Anyone have a way to completely remove these dependencies? I think maybe it's referring to files online rather than local, since I deleted those required libraries. I ran a command prompt: findstr /S /C:'clang' * which is like calling grep from Linux. It shows all the files that reference clang somewhere. It isn't referenced anywhere other than what I deleted already, hence my confusion.

Yes I understand these package managers like conda are supposed to ensure your environment works. But I can compile Python to C++ to PYD (modules) no problem at all with these clang libraries missing. Since I already have clang-12 in the path. This is more of an annoyance than anything else, as every package install / upgrade keeps wanting to install clang-13 libraries that aren't needed...

ANSWER

Answered 2022-Mar-01 at 00:36
Dummy Packages

The cleaner solution is to create a dummy package that one can install as an indicator that the corresponding software is already available on the system. This is what Conda Forge provides for the mpich package. Specifically, they provide an external build (see recipe), that one installs with

1conda remove clang clangxx clang-13 --force
2 "depends": [
3    "beniget 0.4.*",
4    "decorator",
5    "gast 0.5.*",
6    "numpy >=1.19.5,<2.0a0",
7    "ply >=3.4",
8    "python >=3.9,<3.10.0a0",
9    "python_abi 3.9.* *_cp39",
10    "xsimd >=8.0.5,<8.1"
11  ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15
Creating clang Dummy Packages

For custom configurations like what you want, create your own dummy version of the clang and clangxx packages that would satisfy the requirements and install them to the environment. Something like

meta.yaml

1conda remove clang clangxx clang-13 --force
2 "depends": [
3    "beniget 0.4.*",
4    "decorator",
5    "gast 0.5.*",
6    "numpy >=1.19.5,<2.0a0",
7    "ply >=3.4",
8    "python >=3.9,<3.10.0a0",
9    "python_abi 3.9.* *_cp39",
10    "xsimd >=8.0.5,<8.1"
11  ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15{% set version = "12.0.1" %}
16{% set build = 0 %}
17
18package:
19  name: clang-dummies
20  version: {{ version }}
21
22build:
23  number: {{ build }}
24
25outputs:
26  - name: clang
27    string: external_{{ build }}
28  - name: clangxx
29    string: external_{{ build }}
30
31about:
32  license: GPL-3.0-only
33  summary: Dummy package for external clang(xx) compiler.
34

After building this (conda build .), you can install these local versions with

1conda remove clang clangxx clang-13 --force
2 "depends": [
3    "beniget 0.4.*",
4    "decorator",
5    "gast 0.5.*",
6    "numpy >=1.19.5,<2.0a0",
7    "ply >=3.4",
8    "python >=3.9,<3.10.0a0",
9    "python_abi 3.9.* *_cp39",
10    "xsimd >=8.0.5,<8.1"
11  ],
12"clang",
13"clangxx",
14conda install mpich=*=external_*
15{% set version = "12.0.1" %}
16{% set build = 0 %}
17
18package:
19  name: clang-dummies
20  version: {{ version }}
21
22build:
23  number: {{ build }}
24
25outputs:
26  - name: clang
27    string: external_{{ build }}
28  - name: clangxx
29    string: external_{{ build }}
30
31about:
32  license: GPL-3.0-only
33  summary: Dummy package for external clang(xx) compiler.
34conda install --use-local clang=12=external* clangxx=12=external*
35

or upload them to a user Anaconda Cloud channel.

Source https://stackoverflow.com/questions/71302220

QUESTION

unable to install pyodbc using python 3.10 in windows 10

Asked 2022-Feb-24 at 20:07

I get this Error when I try to install Pyodbc , I have already install visual studio and I have Microsoft Visual C++ 12 , 15-19 in my machine but still its giving this error.

1Running setup.py clean for pyodbc
2Failed to build pyodbc
3Installing collected packages: sqlparse, pytz, asgiref, pyodbc, Django, Pillow, mssql-django, django-crispy-forms
4    Running setup.py install for pyodbc ... error
5    ERROR: Command errored out with exit status 1:
6     command: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc'
7         cwd: C:\Users\Athar\AppData\Local\Temp\pip-install-w0wwm18g\pyodbc_61963e883a8543fea24a63b1c522bbea\
8    Complete output (7 lines):
9    running install
10    C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
11      warnings.warn(
12    running build
13    running build_ext
14    building 'pyodbc' extension
15    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
16    ----------------------------------------
17ERROR: Command errored out with exit status 1: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc' Check the logs for full command output.
18

ANSWER

Answered 2021-Nov-12 at 13:38

The current release of pyodbc (4.0.32) does not have pre-built wheel files for Python 3.10. The easiest way to get it installed at the moment is to download the appropriate wheel from

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyodbc

and then install it. For example, if you are running 64-bit Python then you would download the 64-bit wheel and use

1Running setup.py clean for pyodbc
2Failed to build pyodbc
3Installing collected packages: sqlparse, pytz, asgiref, pyodbc, Django, Pillow, mssql-django, django-crispy-forms
4    Running setup.py install for pyodbc ... error
5    ERROR: Command errored out with exit status 1:
6     command: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc'
7         cwd: C:\Users\Athar\AppData\Local\Temp\pip-install-w0wwm18g\pyodbc_61963e883a8543fea24a63b1c522bbea\
8    Complete output (7 lines):
9    running install
10    C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
11      warnings.warn(
12    running build
13    running build_ext
14    building 'pyodbc' extension
15    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
16    ----------------------------------------
17ERROR: Command errored out with exit status 1: 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\Scripts\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"'; __file__='"'"'C:\\Users\\Athar\\AppData\\Local\\Temp\\pip-install-w0wwm18g\\pyodbc_61963e883a8543fea24a63b1c522bbea\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Athar\AppData\Local\Temp\pip-record-t1td50y6\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\Athar\Desktop\New folder\Project\HeatlhCare\venv\include\site\python3.10\pyodbc' Check the logs for full command output.
18pip install pyodbc‑4.0.32‑cp310‑cp310‑win_amd64.whl
19

Source https://stackoverflow.com/questions/69943254

QUESTION

How to register QObject class in CMake with qt_add_qml_module?

Asked 2022-Feb-21 at 07:35

I have a QObject derived class Expense that I use in QML like this.

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8

The expense class has no UI components, it has some basic Signal and Slots for API communications.

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39

I have used qmlRegisterType() for registering Expense type in QML. Below is how my main() looks like.

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41    QGuiApplication app(argc, argv);
42    ......
43
44
45    qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47    ........
48    return app.exec();
49}
50

Everything working perfectly as it used to. But recently I have upgraded my project to QT6 with CMake as the build tool instead of QMake. In the docs I saw that we can use qt_add_qml_module command in CMakeList.txt to register C++ Classes instead of qmlRegisterType(), by adding QML_ELEMENT macro to the QObject class.

But I can't understand how to do this, the documentation doesn't make sense as it uses qmake example (Link to docs) instead of CMake. Below is my CMakeLists.txt file

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41    QGuiApplication app(argc, argv);
42    ......
43
44
45    qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47    ........
48    return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60    main.cpp
61    expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65    URI Udyan
66    VERSION 1.0
67    QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74    MACOSX_BUNDLE TRUE
75    WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79    PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82    PRIVATE Qt6::Quick)
83

So how to use qt_add_qml_module to registering QObject class to use in QML?

Note: All the example I have given above is just an MRE and not my complete code.

ANSWER

Answered 2022-Feb-21 at 07:35

You just need to add QML_ELEMENT to your QObject-derived Expense class's header and make sure you have moc enabled in your CMakeLists.txt. In application case it doesn't matter if the expense.h/cpp sources are included via qt_add_executable or qt_add_qml_module. I think it's clearer to add them to qt_add_qml_module SOURCES. Then you just import module URI in you QML file. In the example below I'm printing out property value from Expense object in QML.

CMakeLists.txt

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41    QGuiApplication app(argc, argv);
42    ......
43
44
45    qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47    ........
48    return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60    main.cpp
61    expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65    URI Udyan
66    VERSION 1.0
67    QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74    MACOSX_BUNDLE TRUE
75    WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79    PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82    PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86    URI udyan
87    VERSION 1.0
88    QML_FILES
89        main.qml
90    SOURCES
91        expense.h
92        expense.cpp
93)
94

C++

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41    QGuiApplication app(argc, argv);
42    ......
43
44
45    qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47    ........
48    return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60    main.cpp
61    expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65    URI Udyan
66    VERSION 1.0
67    QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74    MACOSX_BUNDLE TRUE
75    WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79    PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82    PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86    URI udyan
87    VERSION 1.0
88    QML_FILES
89        main.qml
90    SOURCES
91        expense.h
92        expense.cpp
93)
94#include <QObject>
95#include <QtQml/qqmlregistration.h>
96
97class Expense : public QObject
98{
99    Q_OBJECT
100    QML_ELEMENT
101    Q_PROPERTY(int value READ value NOTIFY valueChanged)
102public:
103    explicit Expense(QObject *parent = nullptr);
104    int value() const;
105
106signals:
107    void valueChanged();
108
109private:
110    int m_value {5};
111};
112

QML:

1// main.qml
2Expense {
3  id: expenseManager
4  onExpenseCreated: {
5      // Do something
6  }
7}
8// expense.h
9
10#ifndef EXPENSE_H
11#define EXPENSE_H
12#include <QObject>
13#include <QString>
14
15#include "service.h"
16
17class Expense : public QObject
18{
19    Q_OBJECT
20
21private:
22    Service service;
23    void networkError();
24    bool buttonLock = false;
25
26public:
27    explicit Expense(QObject *parent = nullptr);
28
29
30public slots:
31    void createInvoice(QString item, float amount);
32
33signals:
34    void expenseCreated();
35
36};
37
38#endif // EXPENSE_H
39int main(int argc, char *argv[])
40{
41    QGuiApplication app(argc, argv);
42    ......
43
44
45    qmlRegisterType<Expense>("com.kadbyte.expense", 1, 0, "Expense");
46
47    ........
48    return app.exec();
49}
50cmake_minimum_required(VERSION 3.16)
51
52project(Udyan VERSION 0.1 LANGUAGES CXX)
53
54set(CMAKE_AUTOMOC ON)
55set(CMAKE_CXX_STANDARD_REQUIRED ON)
56
57find_package(Qt6 6.2 COMPONENTS Quick REQUIRED)
58
59qt_add_executable(appUdyan
60    main.cpp
61    expense.h expense.cpp
62)
63
64qt_add_qml_module(appUdyan
65    URI Udyan
66    VERSION 1.0
67    QML_FILES qml/main.qml
68)
69
70set_target_properties(appUdyan PROPERTIES
71    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
72    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
73    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
74    MACOSX_BUNDLE TRUE
75    WIN32_EXECUTABLE TRUE
76)
77
78target_compile_definitions(appUdyan
79    PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)
80
81target_link_libraries(appUdyan
82    PRIVATE Qt6::Quick)
83set(CMAKE_AUTOMOC ON)
84
85qt_add_qml_module(appUdyan
86    URI udyan
87    VERSION 1.0
88    QML_FILES
89        main.qml
90    SOURCES
91        expense.h
92        expense.cpp
93)
94#include <QObject>
95#include <QtQml/qqmlregistration.h>
96
97class Expense : public QObject
98{
99    Q_OBJECT
100    QML_ELEMENT
101    Q_PROPERTY(int value READ value NOTIFY valueChanged)
102public:
103    explicit Expense(QObject *parent = nullptr);
104    int value() const;
105
106signals:
107    void valueChanged();
108
109private:
110    int m_value {5};
111};
112import QtQuick
113import udyan
114
115Window {
116    width: 640
117    height: 480
118    visible: true
119    title: qsTr("Hello World")
120
121    Expense {
122        id: expense
123        Component.onCompleted: console.log(expense.value)
124    }
125}
126

Source https://stackoverflow.com/questions/71182775

QUESTION

Flutter does not include Native Debug Symbols

Asked 2022-Feb-19 at 21:44

Building my app using flutter on android studio, and when I upload my app bundle (made via flutter build appbundle, the message pops up:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4

I've tried every solution currently online to fix this. Every combination of the following:
these solutions:

Upgrading to Flutter 2.10.0
Upgrading to Android Studio Bumblebee | 2021.1.1 Patch 1 and clicking check for updates, to which it responds You already have the latest version of Android Studio and plugins installed.
Trying to check the gradle plugin version, but it's packaged into android studio, and I can't see the version nor an option to upgrade.
Upgrading Android SDK build tools to 33-rc1. via SDK manager
Installing NDK (Side-by-side) via SDK manager
Installing CMake via SDK manager
Adding ndk.dir=/home/jaden/Android/Sdk/ndk/23.1.7779620 to the local.properties file, even though that's apparently deprecated. adding android.buildTypes.release.ndk.debugSymbolLevel = 'SYMBOL_TABLE' to the bottom of my app/build.gradle.
from app/build.gradle:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28

flutter doctor:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40

last lines of flutter build appbundle -v:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[        ] > Task :app:compileReleaseAidl NO-SOURCE
67[        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[        ] > Task :app:processReleaseResources UP-TO-DATE
89[        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[        ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[        ] > Task :app:extractProguardFiles UP-TO-DATE
108[        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[        ] > Task :app:processReleaseJavaRes NO-SOURCE
110[        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[        ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[        ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[        ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[        ] > Task :app:produceReleaseBundleIdeListingFile
247[        ] > Task :app:createReleaseBundleListingFileRedirect
248[        ] > Task :app:bundleRelease
249[  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[        ] BUILD SUCCESSFUL in 36s
253[        ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[   +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[   +5 ms] Running shutdown hooks
259[   +1 ms] Shutdown hooks complete
260[   +3 ms] exiting with code 0
261
262

What's insane is that the flutter documentation for building and releasing an android app says absolutely nothing about including native debug symbols. That leads me to believe that for some reason, flutter should already be including them in the app bundle, but it's not. Does it have anything to do with obfuscating my code? I didn't obfuscate mine, but do I need to use the solutions described in there to pull out the native debug symbols?
Is this even supported? Should I just upload the app as-is without the feature? What am I supposed to do when I get unintelligible crash reports?

ANSWER

Answered 2022-Feb-19 at 21:44

Turns out the problem is occurring, for some reason, due to my usage of gradle plugin 7.1.1. Changing classpath 'com.android.tools.build:gradle:7.1.1' to 'classpath 'com.android.tools.build:gradle:4.1.3'` fixes my problem. The google play console recognizes the native debug symbols within the app bundle. It's unclear why, except within the app bundle, the directory BUNDLE-METADATA contains the directories:
Using 7.1.1:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[        ] > Task :app:compileReleaseAidl NO-SOURCE
67[        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[        ] > Task :app:processReleaseResources UP-TO-DATE
89[        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[        ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[        ] > Task :app:extractProguardFiles UP-TO-DATE
108[        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[        ] > Task :app:processReleaseJavaRes NO-SOURCE
110[        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[        ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[        ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[        ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[        ] > Task :app:produceReleaseBundleIdeListingFile
247[        ] > Task :app:createReleaseBundleListingFileRedirect
248[        ] > Task :app:bundleRelease
249[  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[        ] BUILD SUCCESSFUL in 36s
253[        ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[   +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[   +5 ms] Running shutdown hooks
259[   +1 ms] Shutdown hooks complete
260[   +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265

Using 4.1.3:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[        ] > Task :app:compileReleaseAidl NO-SOURCE
67[        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[        ] > Task :app:processReleaseResources UP-TO-DATE
89[        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[        ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[        ] > Task :app:extractProguardFiles UP-TO-DATE
108[        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[        ] > Task :app:processReleaseJavaRes NO-SOURCE
110[        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[        ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[        ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[        ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[        ] > Task :app:produceReleaseBundleIdeListingFile
247[        ] > Task :app:createReleaseBundleListingFileRedirect
248[        ] > Task :app:bundleRelease
249[  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[        ] BUILD SUCCESSFUL in 36s
253[        ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[   +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[   +5 ms] Running shutdown hooks
259[   +1 ms] Shutdown hooks complete
260[   +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268

I've tried it with multiple versions of the android gradle plugin, and I can say that the problem occurs after android gradle plugin version 4.1.3. So my fix right now is to make android/build.gradle have:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[        ] > Task :app:compileReleaseAidl NO-SOURCE
67[        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[        ] > Task :app:processReleaseResources UP-TO-DATE
89[        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[        ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[        ] > Task :app:extractProguardFiles UP-TO-DATE
108[        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[        ] > Task :app:processReleaseJavaRes NO-SOURCE
110[        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[        ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[        ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[        ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[        ] > Task :app:produceReleaseBundleIdeListingFile
247[        ] > Task :app:createReleaseBundleListingFileRedirect
248[        ] > Task :app:bundleRelease
249[  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[        ] BUILD SUCCESSFUL in 36s
253[        ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[   +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[   +5 ms] Running shutdown hooks
259[   +1 ms] Shutdown hooks complete
260[   +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268buildscript {
269    ...
270    dependencies {
271        classpath 'com.android.tools.build:gradle:4.1.3'
272        ...
273    }
274}
275

The next version of the plugin, 4.2.0, omits the native debug files, despite this inclusion in app/build.gradle:

1Warning
2
3This App Bundle contains native code, and youve not uploaded debug symbols. We recommend you upload a symbol file to make your crashes and ANRs easier to analyze and debug. Learn More
4android {
5    compileSdkVersion 31
6
7    ...
8
9    defaultConfig {
10        applicationId "app.(myapp)"
11        minSdkVersion 23
12        targetSdkVersion 31
13        versionCode flutterVersionCode.toInteger()
14        versionName flutterVersionName
15    }
16    ndkVersion "23.1.7779620"
17    buildTypes {
18        ...
19        release {
20            signingConfig signingConfigs.release
21            ndk {
22                debugSymbolLevel 'SYMBOL_TABLE'
23            }
24        }
25    }
26}
27
28flutter doctor
29Doctor summary (to see all details, run flutter doctor -v):
30[✓] Flutter (Channel stable, 2.10.0, on Manjaro Linux 5.13.19-2-MANJARO, locale en_US.UTF-8)
31[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
32[✗] Chrome - develop for the web (Cannot find Chrome executable at google-chrome)
33    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
34[✓] Android Studio (version 2021.1)
35[!] Connected device
36    ! No devices available
37[✓] HTTP Host Availability
38
39! Doctor found issues in 2 categories.
40[        ] > Task :package_info_plus:generateReleaseBuildConfig UP-TO-DATE
41[        ] > Task :package_info_plus:parseReleaseLocalResources UP-TO-DATE
42[        ] > Task :package_info_plus:generateReleaseRFile UP-TO-DATE
43[        ] > Task :package_info_plus:javaPreCompileRelease UP-TO-DATE
44[        ] > Task :package_info_plus:compileReleaseJavaWithJavac UP-TO-DATE
45[        ] > Task :package_info_plus:mergeReleaseGeneratedProguardFiles UP-TO-DATE
46[        ] > Task :package_info_plus:exportReleaseConsumerProguardFiles UP-TO-DATE
47[        ] > Task :fluttertoast:compileReleaseAidl NO-SOURCE
48[        ] > Task :fluttertoast:generateReleaseBuildConfig UP-TO-DATE
49[        ] > Task :fluttertoast:parseReleaseLocalResources UP-TO-DATE
50[        ] > Task :fluttertoast:generateReleaseRFile UP-TO-DATE
51[        ] > Task :fluttertoast:compileReleaseKotlin UP-TO-DATE
52[        ] > Task :fluttertoast:javaPreCompileRelease UP-TO-DATE
53[        ] > Task :fluttertoast:compileReleaseJavaWithJavac UP-TO-DATE
54[  +97 ms] > Task :fluttertoast:mergeReleaseGeneratedProguardFiles UP-TO-DATE
55[        ] > Task :fluttertoast:exportReleaseConsumerProguardFiles UP-TO-DATE
56[        ] > Task :permission_handler:compileReleaseAidl NO-SOURCE
57[        ] > Task :permission_handler:generateReleaseBuildConfig UP-TO-DATE
58[        ] > Task :permission_handler:parseReleaseLocalResources UP-TO-DATE
59[        ] > Task :permission_handler:generateReleaseRFile UP-TO-DATE
60[        ] > Task :permission_handler:javaPreCompileRelease UP-TO-DATE
61[        ] > Task :permission_handler:compileReleaseJavaWithJavac UP-TO-DATE
62[        ] > Task :permission_handler:mergeReleaseGeneratedProguardFiles UP-TO-DATE
63[        ] > Task :permission_handler:exportReleaseConsumerProguardFiles UP-TO-DATE
64[        ] > Task :app:buildKotlinToolingMetadata UP-TO-DATE
65[        ] > Task :app:checkReleaseDuplicateClasses UP-TO-DATE
66[        ] > Task :app:compileReleaseAidl NO-SOURCE
67[        ] > Task :app:generateReleaseBuildConfig UP-TO-DATE
68[        ] > Task :cloud_firestore:writeReleaseAarMetadata UP-TO-DATE
69[        ] > Task :file_picker:writeReleaseAarMetadata UP-TO-DATE
70[        ] > Task :firebase_auth:writeReleaseAarMetadata UP-TO-DATE
71[        ] > Task :firebase_core:writeReleaseAarMetadata UP-TO-DATE
72[        ] > Task :flutter_fimber:writeReleaseAarMetadata UP-TO-DATE
73[        ] > Task :flutter_inappwebview:writeReleaseAarMetadata UP-TO-DATE
74[        ] > Task :flutter_keyboard_visibility:writeReleaseAarMetadata UP-TO-DATE
75[        ] > Task :flutter_plugin_android_lifecycle:writeReleaseAarMetadata UP-TO-DATE
76[        ] > Task :fluttertoast:writeReleaseAarMetadata UP-TO-DATE
77[        ] > Task :image_picker:writeReleaseAarMetadata UP-TO-DATE
78[        ] > Task :package_info_plus:writeReleaseAarMetadata UP-TO-DATE
79[        ] > Task :path_provider_android:writeReleaseAarMetadata UP-TO-DATE
80[        ] > Task :permission_handler:writeReleaseAarMetadata UP-TO-DATE
81[        ] > Task :share_plus:writeReleaseAarMetadata UP-TO-DATE
82[        ] > Task :shared_preferences_android:writeReleaseAarMetadata UP-TO-DATE
83[        ] > Task :url_launcher_android:writeReleaseAarMetadata UP-TO-DATE
84[        ] > Task :webview_flutter_android:writeReleaseAarMetadata UP-TO-DATE
85[        ] > Task :app:checkReleaseAarMetadata UP-TO-DATE
86[ +495 ms] > Task :app:copyFlutterAssetsRelease
87[        ] > Task :app:processReleaseManifestForPackage UP-TO-DATE
88[        ] > Task :app:processReleaseResources UP-TO-DATE
89[        ] > Task :cloud_firestore:bundleLibCompileToJarRelease UP-TO-DATE
90[        ] > Task :file_picker:bundleLibCompileToJarRelease UP-TO-DATE
91[        ] > Task :firebase_auth:bundleLibCompileToJarRelease UP-TO-DATE
92[        ] > Task :flutter_fimber:bundleLibCompileToJarRelease UP-TO-DATE
93[        ] > Task :flutter_inappwebview:bundleLibCompileToJarRelease UP-TO-DATE
94[        ] > Task :flutter_keyboard_visibility:bundleLibCompileToJarRelease UP-TO-DATE
95[        ] > Task :fluttertoast:bundleLibCompileToJarRelease UP-TO-DATE
96[        ] > Task :image_picker:bundleLibCompileToJarRelease UP-TO-DATE
97[        ] > Task :package_info_plus:bundleLibCompileToJarRelease UP-TO-DATE
98[        ] > Task :path_provider_android:bundleLibCompileToJarRelease UP-TO-DATE
99[        ] > Task :permission_handler:bundleLibCompileToJarRelease UP-TO-DATE
100[        ] > Task :share_plus:bundleLibCompileToJarRelease UP-TO-DATE
101[        ] > Task :shared_preferences_android:bundleLibCompileToJarRelease UP-TO-DATE
102[        ] > Task :url_launcher_android:bundleLibCompileToJarRelease UP-TO-DATE
103[        ] > Task :webview_flutter_android:bundleLibCompileToJarRelease UP-TO-DATE
104[  +96 ms] > Task :app:compileReleaseKotlin UP-TO-DATE
105[        ] > Task :app:javaPreCompileRelease UP-TO-DATE
106[        ] > Task :app:compileReleaseJavaWithJavac UP-TO-DATE
107[        ] > Task :app:extractProguardFiles UP-TO-DATE
108[        ] > Task :app:mergeReleaseGeneratedProguardFiles UP-TO-DATE
109[        ] > Task :app:processReleaseJavaRes NO-SOURCE
110[        ] > Task :cloud_firestore:processReleaseJavaRes NO-SOURCE
111[        ] > Task :cloud_firestore:bundleLibResRelease NO-SOURCE
112[        ] > Task :file_picker:processReleaseJavaRes NO-SOURCE
113[        ] > Task :file_picker:bundleLibResRelease NO-SOURCE
114[        ] > Task :firebase_auth:processReleaseJavaRes NO-SOURCE
115[        ] > Task :firebase_auth:bundleLibResRelease NO-SOURCE
116[        ] > Task :firebase_core:processReleaseJavaRes NO-SOURCE
117[        ] > Task :firebase_core:bundleLibResRelease NO-SOURCE
118[        ] > Task :flutter_fimber:processReleaseJavaRes NO-SOURCE
119[        ] > Task :flutter_fimber:bundleLibResRelease UP-TO-DATE
120[        ] > Task :flutter_inappwebview:processReleaseJavaRes NO-SOURCE
121[        ] > Task :flutter_inappwebview:bundleLibResRelease NO-SOURCE
122[        ] > Task :flutter_keyboard_visibility:processReleaseJavaRes NO-SOURCE
123[        ] > Task :flutter_keyboard_visibility:bundleLibResRelease NO-SOURCE
124[        ] > Task :flutter_plugin_android_lifecycle:processReleaseJavaRes NO-SOURCE
125[        ] > Task :flutter_plugin_android_lifecycle:bundleLibResRelease NO-SOURCE
126[        ] > Task :fluttertoast:processReleaseJavaRes NO-SOURCE
127[        ] > Task :fluttertoast:bundleLibResRelease UP-TO-DATE
128[        ] > Task :image_picker:processReleaseJavaRes NO-SOURCE
129[        ] > Task :image_picker:bundleLibResRelease NO-SOURCE
130[        ] > Task :package_info_plus:processReleaseJavaRes NO-SOURCE
131[        ] > Task :package_info_plus:bundleLibResRelease NO-SOURCE
132[        ] > Task :path_provider_android:processReleaseJavaRes NO-SOURCE
133[        ] > Task :path_provider_android:bundleLibResRelease NO-SOURCE
134[        ] > Task :permission_handler:processReleaseJavaRes NO-SOURCE
135[        ] > Task :permission_handler:bundleLibResRelease NO-SOURCE
136[        ] > Task :share_plus:processReleaseJavaRes NO-SOURCE
137[        ] > Task :share_plus:bundleLibResRelease NO-SOURCE
138[        ] > Task :shared_preferences_android:processReleaseJavaRes NO-SOURCE
139[        ] > Task :shared_preferences_android:bundleLibResRelease NO-SOURCE
140[        ] > Task :url_launcher_android:processReleaseJavaRes NO-SOURCE
141[        ] > Task :url_launcher_android:bundleLibResRelease NO-SOURCE
142[        ] > Task :webview_flutter_android:processReleaseJavaRes NO-SOURCE
143[        ] > Task :webview_flutter_android:bundleLibResRelease NO-SOURCE
144[        ] > Task :app:mergeReleaseJavaResource UP-TO-DATE
145[        ] > Task :cloud_firestore:bundleLibRuntimeToJarRelease UP-TO-DATE
146[        ] > Task :file_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
147[        ] > Task :firebase_auth:bundleLibRuntimeToJarRelease UP-TO-DATE
148[        ] > Task :firebase_core:bundleLibRuntimeToJarRelease UP-TO-DATE
149[        ] > Task :flutter_fimber:bundleLibRuntimeToJarRelease UP-TO-DATE
150[        ] > Task :flutter_inappwebview:bundleLibRuntimeToJarRelease UP-TO-DATE
151[        ] > Task :flutter_keyboard_visibility:bundleLibRuntimeToJarRelease UP-TO-DATE
152[        ] > Task :flutter_plugin_android_lifecycle:bundleLibRuntimeToJarRelease UP-TO-DATE
153[        ] > Task :fluttertoast:bundleLibRuntimeToJarRelease UP-TO-DATE
154[        ] > Task :image_picker:bundleLibRuntimeToJarRelease UP-TO-DATE
155[        ] > Task :package_info_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
156[        ] > Task :path_provider_android:bundleLibRuntimeToJarRelease UP-TO-DATE
157[        ] > Task :permission_handler:bundleLibRuntimeToJarRelease UP-TO-DATE
158[        ] > Task :share_plus:bundleLibRuntimeToJarRelease UP-TO-DATE
159[        ] > Task :shared_preferences_android:bundleLibRuntimeToJarRelease UP-TO-DATE
160[        ] > Task :url_launcher_android:bundleLibRuntimeToJarRelease UP-TO-DATE
161[        ] > Task :webview_flutter_android:bundleLibRuntimeToJarRelease UP-TO-DATE
162[ +172 ms] > Task :app:minifyReleaseWithR8 UP-TO-DATE
163[        ] > Task :app:mergeReleaseJniLibFolders UP-TO-DATE
164[        ] > Task :cloud_firestore:mergeReleaseJniLibFolders UP-TO-DATE
165[        ] > Task :cloud_firestore:mergeReleaseNativeLibs NO-SOURCE
166[        ] > Task :cloud_firestore:copyReleaseJniLibsProjectOnly UP-TO-DATE
167[        ] > Task :file_picker:mergeReleaseJniLibFolders UP-TO-DATE
168[        ] > Task :file_picker:mergeReleaseNativeLibs NO-SOURCE
169[        ] > Task :file_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
170[        ] > Task :firebase_auth:mergeReleaseJniLibFolders UP-TO-DATE
171[        ] > Task :firebase_auth:mergeReleaseNativeLibs NO-SOURCE
172[        ] > Task :firebase_auth:copyReleaseJniLibsProjectOnly UP-TO-DATE
173[        ] > Task :firebase_core:mergeReleaseJniLibFolders UP-TO-DATE
174[        ] > Task :firebase_core:mergeReleaseNativeLibs NO-SOURCE
175[        ] > Task :firebase_core:copyReleaseJniLibsProjectOnly UP-TO-DATE
176[        ] > Task :flutter_fimber:mergeReleaseJniLibFolders UP-TO-DATE
177[        ] > Task :flutter_fimber:mergeReleaseNativeLibs NO-SOURCE
178[        ] > Task :flutter_fimber:copyReleaseJniLibsProjectOnly UP-TO-DATE
179[        ] > Task :flutter_inappwebview:mergeReleaseJniLibFolders UP-TO-DATE
180[        ] > Task :flutter_inappwebview:mergeReleaseNativeLibs NO-SOURCE
181[        ] > Task :flutter_inappwebview:copyReleaseJniLibsProjectOnly UP-TO-DATE
182[        ] > Task :flutter_keyboard_visibility:mergeReleaseJniLibFolders UP-TO-DATE
183[        ] > Task :flutter_keyboard_visibility:mergeReleaseNativeLibs NO-SOURCE
184[        ] > Task :flutter_keyboard_visibility:copyReleaseJniLibsProjectOnly UP-TO-DATE
185[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseJniLibFolders UP-TO-DATE
186[        ] > Task :flutter_plugin_android_lifecycle:mergeReleaseNativeLibs NO-SOURCE
187[        ] > Task :flutter_plugin_android_lifecycle:copyReleaseJniLibsProjectOnly UP-TO-DATE
188[        ] > Task :fluttertoast:mergeReleaseJniLibFolders UP-TO-DATE
189[        ] > Task :fluttertoast:mergeReleaseNativeLibs NO-SOURCE
190[        ] > Task :fluttertoast:copyReleaseJniLibsProjectOnly UP-TO-DATE
191[  +16 ms] > Task :image_picker:mergeReleaseJniLibFolders UP-TO-DATE
192[        ] > Task :image_picker:mergeReleaseNativeLibs NO-SOURCE
193[        ] > Task :image_picker:copyReleaseJniLibsProjectOnly UP-TO-DATE
194[        ] > Task :package_info_plus:mergeReleaseJniLibFolders UP-TO-DATE
195[        ] > Task :package_info_plus:mergeReleaseNativeLibs NO-SOURCE
196[        ] > Task :package_info_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
197[        ] > Task :path_provider_android:mergeReleaseJniLibFolders UP-TO-DATE
198[        ] > Task :path_provider_android:mergeReleaseNativeLibs NO-SOURCE
199[        ] > Task :path_provider_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
200[  +98 ms] > Task :permission_handler:mergeReleaseJniLibFolders UP-TO-DATE
201[        ] > Task :permission_handler:mergeReleaseNativeLibs NO-SOURCE
202[        ] > Task :permission_handler:copyReleaseJniLibsProjectOnly UP-TO-DATE
203[        ] > Task :share_plus:mergeReleaseJniLibFolders UP-TO-DATE
204[        ] > Task :share_plus:mergeReleaseNativeLibs NO-SOURCE
205[        ] > Task :share_plus:copyReleaseJniLibsProjectOnly UP-TO-DATE
206[        ] > Task :shared_preferences_android:mergeReleaseJniLibFolders UP-TO-DATE
207[        ] > Task :shared_preferences_android:mergeReleaseNativeLibs NO-SOURCE
208[        ] > Task :shared_preferences_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
209[        ] > Task :url_launcher_android:mergeReleaseJniLibFolders UP-TO-DATE
210[        ] > Task :url_launcher_android:mergeReleaseNativeLibs NO-SOURCE
211[        ] > Task :url_launcher_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
212[        ] > Task :webview_flutter_android:mergeReleaseJniLibFolders UP-TO-DATE
213[        ] > Task :webview_flutter_android:mergeReleaseNativeLibs NO-SOURCE
214[  +98 ms] > Task :webview_flutter_android:copyReleaseJniLibsProjectOnly UP-TO-DATE
215[        ] > Task :app:mergeReleaseNativeLibs UP-TO-DATE
216[        ] > Task :app:stripReleaseDebugSymbols UP-TO-DATE
217[+2799 ms] > Task :app:buildReleasePreBundle
218[        ] > Task :cloud_firestore:prepareReleaseArtProfile UP-TO-DATE
219[        ] > Task :file_picker:prepareReleaseArtProfile UP-TO-DATE
220[        ] > Task :firebase_auth:prepareReleaseArtProfile UP-TO-DATE
221[        ] > Task :firebase_core:prepareReleaseArtProfile UP-TO-DATE
222[        ] > Task :flutter_fimber:prepareReleaseArtProfile UP-TO-DATE
223[        ] > Task :flutter_inappwebview:prepareReleaseArtProfile UP-TO-DATE
224[        ] > Task :flutter_keyboard_visibility:prepareReleaseArtProfile UP-TO-DATE
225[        ] > Task :flutter_plugin_android_lifecycle:prepareReleaseArtProfile UP-TO-DATE
226[        ] > Task :fluttertoast:prepareReleaseArtProfile UP-TO-DATE
227[        ] > Task :image_picker:prepareReleaseArtProfile UP-TO-DATE
228[        ] > Task :package_info_plus:prepareReleaseArtProfile UP-TO-DATE
229[        ] > Task :path_provider_android:prepareReleaseArtProfile UP-TO-DATE
230[        ] > Task :permission_handler:prepareReleaseArtProfile UP-TO-DATE
231[        ] > Task :share_plus:prepareReleaseArtProfile UP-TO-DATE
232[        ] > Task :shared_preferences_android:prepareReleaseArtProfile UP-TO-DATE
233[        ] > Task :url_launcher_android:prepareReleaseArtProfile UP-TO-DATE
234[        ] > Task :webview_flutter_android:prepareReleaseArtProfile UP-TO-DATE
235[        ] > Task :app:mergeReleaseArtProfile UP-TO-DATE
236[        ] > Task :app:compileReleaseArtProfile UP-TO-DATE
237[        ] > Task :app:collectReleaseDependencies UP-TO-DATE
238[        ] > Task :app:configureReleaseDependencies UP-TO-DATE
239[        ] > Task :app:extractReleaseNativeSymbolTables UP-TO-DATE
240[        ] > Task :app:parseReleaseIntegrityConfig UP-TO-DATE
241[        ] > Task :app:writeReleaseAppMetadata UP-TO-DATE
242[        ] > Task :app:validateSigningRelease UP-TO-DATE
243[+3397 ms] > Task :app:packageReleaseBundle
244[+4398 ms] > Task :app:shrinkBundleReleaseResources
245[+5699 ms] > Task :app:signReleaseBundle
246[        ] > Task :app:produceReleaseBundleIdeListingFile
247[        ] > Task :app:createReleaseBundleListingFileRedirect
248[        ] > Task :app:bundleRelease
249[  +96 ms] Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
250[        ] You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
251[        ] See https://docs.gradle.org/7.4/userguide/command_line_interface.html#sec:command_line_warnings
252[        ] BUILD SUCCESSFUL in 36s
253[        ] 375 actionable tasks: 11 executed, 364 up-to-date
254[ +397 ms] Running Gradle task 'bundleRelease'... (completed in 37.5s)
255[  +30 ms] ✓ Built build/app/outputs/bundle/release/app-release.aab (68.2MB).
256[   +5 ms] "flutter appbundle" took 39,072ms.
257[ +235 ms] ensureAnalyticsSent: 224ms
258[   +5 ms] Running shutdown hooks
259[   +1 ms] Shutdown hooks complete
260[   +3 ms] exiting with code 0
261
262com.android.tools.build.gradle
263com.android.tools.build.libraries
264com.android.tools.build.obfuscation
265com.android.tools.build.debugsymbols
266com.android.tools.build.libraries
267com.android.tools.build.obfuscation
268buildscript {
269    ...
270    dependencies {
271        classpath 'com.android.tools.build:gradle:4.1.3'
272        ...
273    }
274}
275android {
276    ...
277    packagingOptions {
278        dex {
279            useLegacyPackaging true
280        }
281        jniLibs {
282            useLegacyPackaging true
283        }
284    }
285}
286

Source https://stackoverflow.com/questions/71179303

QUESTION

The function pointer is changing its own address

Asked 2022-Feb-17 at 07:53

I am first time using function pointers and ran into a weird problem. I am writing a code for STM32G4xx. The main idea is to transmit and receive data through LPUART. I have implemented simple FSM to handle TX and RX. LPUART configured in DMA interrupt mode. I have typedef the function pointer and declared the three function pointer variables (ISR handles) in main.h file as follow:

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22

The definition of the function pointer is in function MX_LPUART1_UART_Init() in the main.c file.

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25  /* USER CODE BEGIN 1 */
26
27  /* USER CODE END 1 */
28
29  /* MCU Configuration--------------------------------------------------------*/
30
31  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38  /* System interrupt init*/
39  /* SysTick_IRQn interrupt configuration */
40  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42  /** Configure the internal voltage reference buffer voltage scale
43  */
44  LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45  /** Enable the Internal Voltage Reference buffer
46  */
47  LL_VREFBUF_Enable();
48  /** Configure the internal voltage reference buffer high impedance mode
49  */
50  LL_VREFBUF_DisableHIZ();
51  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52  */
53  LL_PWR_DisableUCPDDeadBattery();
54
55  /* USER CODE BEGIN Init */
56
57  /* USER CODE END Init */
58
59  /* Configure the system clock */
60  SystemClock_Config();
61
62  /* USER CODE BEGIN SysInit */
63
64  /* USER CODE END SysInit */
65
66  /* Initialize all configured peripherals */
67  MX_GPIO_Init();
68  MX_DMA_Init();
69  MX_LPUART1_UART_Init();
70  MX_RTC_Init();
71  /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73  lpuart_init_test();
74#endif
75  /* USER CODE END 2 */
76
77  /* Infinite loop */
78  /* USER CODE BEGIN WHILE */
79    LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80    //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81    LL_mDelay(1);
82    uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83    //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86    uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87    for(uint16_t i = 0 ; i<19 ; i++){
88        set_len_rx_dma_buff(len_test[i]);
89        lpuart_rx_test();
90    }
91#endif
92static uint8_t once = 1;
93    while (1)
94    {
95        lpuart_task();
96        //delay_ms_DWT(1);
97        /*if(once){
98            once = 0;
99            lpuart_start_tx(buf, 9);
100            LL_mDelay(100);
101        }*/
102
103        if(1){
104            //lpuart_start_tx(buf, 9);
105            if(!lpuart_isTxBusy()){
106                lpuart_start_tx(buf, 9);
107                delay_ms_DWT(1);
108                if(!lpuart_isRxBusy()){
109                    rxOldIndex += rxIndex;
110                    if(rxOldIndex > 255){
111                        rxOldIndex = 0;
112                        rxIndex = 0;
113                    }
114                    rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115                    for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116                        rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117                    }
118                }
119            }
120        }
121    //}
122    }
123    /* USER CODE END WHILE */
124
125    /* USER CODE BEGIN 3 */
126
127  /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132  /* USER CODE BEGIN LPUART1_Init 0 */
133
134  /* USER CODE END LPUART1_Init 0 */
135
136  LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140  /* Peripheral clock enable */
141  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144  /**LPUART1 GPIO Configuration
145  PB10   ------> LPUART1_RX
146  PB11   ------> LPUART1_TX
147  */
148  GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156  GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164  /* LPUART1 DMA Init */
165
166  /* LPUART1_TX Init */
167  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183  /* LPUART1_RX Init */
184  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200  /* LPUART1 interrupt Init */
201  NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202  NVIC_EnableIRQ(LPUART1_IRQn);
203
204  /* USER CODE BEGIN LPUART1_Init 1 */
205
206  /* USER CODE END LPUART1_Init 1 */
207  LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208  LPUART_InitStruct.BaudRate = 9600;
209  LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210  LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211  LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212  LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213  LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214  LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215  LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216  LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217  LL_LPUART_DisableFIFO(LPUART1);
218  LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219//  LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222  /* USER CODE BEGIN WKUPType LPUART1 */
223
224  /* USER CODE END WKUPType LPUART1 */
225
226  LL_LPUART_Enable(LPUART1);
227
228  /* Polling LPUART1 initialisation */
229  while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230  {
231  }
232  /* USER CODE BEGIN LPUART1_Init 2 */
233
234    //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235    /* Enable TC interrupts for RX */
236
237
238    /* Enable HT & TC interrupts for TX */
239    // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241    lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242    //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243    lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244    lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246    //LL_LPUART_EnableDirectionRx(LPUART1);
247    LL_LPUART_EnableDirectionTx(LPUART1);
248    //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250  /* USER CODE END LPUART1_Init 2 */
251
252}
253

In main function, in while loop, I am calling the lpuart_start_tx(buf, 9); function just after the if(!lpuart_isTxBusy()) statement. This causes change of the address of the function pointer lpuart_dma_rx_tc_isr_clback but other two function pointers don't change its addresses and work fine. When an intrrupt raised on the reception of the data, it tried to execute lpuart_dma_rx_tc_isr_clback which causes the hard fault because its address was modified. Note that if I call lpuart_start_tx(buf, 9); before if(!lpuart_isTxBusy()), then everything works fine. I don't understand what could be an issue.

I have checked the CFSR register and every time different flag was raised. I have noticed that out of three flags, such as IBUSERR, IACCVOIL, and INVSTATE, one of them was raised. I have not included the full main.c file.

LPUART FSM implementation is as follow: lpuart.h file

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25  /* USER CODE BEGIN 1 */
26
27  /* USER CODE END 1 */
28
29  /* MCU Configuration--------------------------------------------------------*/
30
31  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38  /* System interrupt init*/
39  /* SysTick_IRQn interrupt configuration */
40  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42  /** Configure the internal voltage reference buffer voltage scale
43  */
44  LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45  /** Enable the Internal Voltage Reference buffer
46  */
47  LL_VREFBUF_Enable();
48  /** Configure the internal voltage reference buffer high impedance mode
49  */
50  LL_VREFBUF_DisableHIZ();
51  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52  */
53  LL_PWR_DisableUCPDDeadBattery();
54
55  /* USER CODE BEGIN Init */
56
57  /* USER CODE END Init */
58
59  /* Configure the system clock */
60  SystemClock_Config();
61
62  /* USER CODE BEGIN SysInit */
63
64  /* USER CODE END SysInit */
65
66  /* Initialize all configured peripherals */
67  MX_GPIO_Init();
68  MX_DMA_Init();
69  MX_LPUART1_UART_Init();
70  MX_RTC_Init();
71  /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73  lpuart_init_test();
74#endif
75  /* USER CODE END 2 */
76
77  /* Infinite loop */
78  /* USER CODE BEGIN WHILE */
79    LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80    //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81    LL_mDelay(1);
82    uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83    //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86    uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87    for(uint16_t i = 0 ; i<19 ; i++){
88        set_len_rx_dma_buff(len_test[i]);
89        lpuart_rx_test();
90    }
91#endif
92static uint8_t once = 1;
93    while (1)
94    {
95        lpuart_task();
96        //delay_ms_DWT(1);
97        /*if(once){
98            once = 0;
99            lpuart_start_tx(buf, 9);
100            LL_mDelay(100);
101        }*/
102
103        if(1){
104            //lpuart_start_tx(buf, 9);
105            if(!lpuart_isTxBusy()){
106                lpuart_start_tx(buf, 9);
107                delay_ms_DWT(1);
108                if(!lpuart_isRxBusy()){
109                    rxOldIndex += rxIndex;
110                    if(rxOldIndex > 255){
111                        rxOldIndex = 0;
112                        rxIndex = 0;
113                    }
114                    rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115                    for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116                        rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117                    }
118                }
119            }
120        }
121    //}
122    }
123    /* USER CODE END WHILE */
124
125    /* USER CODE BEGIN 3 */
126
127  /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132  /* USER CODE BEGIN LPUART1_Init 0 */
133
134  /* USER CODE END LPUART1_Init 0 */
135
136  LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140  /* Peripheral clock enable */
141  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144  /**LPUART1 GPIO Configuration
145  PB10   ------> LPUART1_RX
146  PB11   ------> LPUART1_TX
147  */
148  GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156  GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164  /* LPUART1 DMA Init */
165
166  /* LPUART1_TX Init */
167  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183  /* LPUART1_RX Init */
184  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200  /* LPUART1 interrupt Init */
201  NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202  NVIC_EnableIRQ(LPUART1_IRQn);
203
204  /* USER CODE BEGIN LPUART1_Init 1 */
205
206  /* USER CODE END LPUART1_Init 1 */
207  LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208  LPUART_InitStruct.BaudRate = 9600;
209  LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210  LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211  LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212  LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213  LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214  LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215  LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216  LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217  LL_LPUART_DisableFIFO(LPUART1);
218  LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219//  LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222  /* USER CODE BEGIN WKUPType LPUART1 */
223
224  /* USER CODE END WKUPType LPUART1 */
225
226  LL_LPUART_Enable(LPUART1);
227
228  /* Polling LPUART1 initialisation */
229  while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230  {
231  }
232  /* USER CODE BEGIN LPUART1_Init 2 */
233
234    //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235    /* Enable TC interrupts for RX */
236
237
238    /* Enable HT & TC interrupts for TX */
239    // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241    lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242    //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243    lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244    lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246    //LL_LPUART_EnableDirectionRx(LPUART1);
247    LL_LPUART_EnableDirectionTx(LPUART1);
248    //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250  /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef  USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276

lpuart.c

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25  /* USER CODE BEGIN 1 */
26
27  /* USER CODE END 1 */
28
29  /* MCU Configuration--------------------------------------------------------*/
30
31  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38  /* System interrupt init*/
39  /* SysTick_IRQn interrupt configuration */
40  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42  /** Configure the internal voltage reference buffer voltage scale
43  */
44  LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45  /** Enable the Internal Voltage Reference buffer
46  */
47  LL_VREFBUF_Enable();
48  /** Configure the internal voltage reference buffer high impedance mode
49  */
50  LL_VREFBUF_DisableHIZ();
51  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52  */
53  LL_PWR_DisableUCPDDeadBattery();
54
55  /* USER CODE BEGIN Init */
56
57  /* USER CODE END Init */
58
59  /* Configure the system clock */
60  SystemClock_Config();
61
62  /* USER CODE BEGIN SysInit */
63
64  /* USER CODE END SysInit */
65
66  /* Initialize all configured peripherals */
67  MX_GPIO_Init();
68  MX_DMA_Init();
69  MX_LPUART1_UART_Init();
70  MX_RTC_Init();
71  /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73  lpuart_init_test();
74#endif
75  /* USER CODE END 2 */
76
77  /* Infinite loop */
78  /* USER CODE BEGIN WHILE */
79    LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80    //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81    LL_mDelay(1);
82    uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83    //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86    uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87    for(uint16_t i = 0 ; i<19 ; i++){
88        set_len_rx_dma_buff(len_test[i]);
89        lpuart_rx_test();
90    }
91#endif
92static uint8_t once = 1;
93    while (1)
94    {
95        lpuart_task();
96        //delay_ms_DWT(1);
97        /*if(once){
98            once = 0;
99            lpuart_start_tx(buf, 9);
100            LL_mDelay(100);
101        }*/
102
103        if(1){
104            //lpuart_start_tx(buf, 9);
105            if(!lpuart_isTxBusy()){
106                lpuart_start_tx(buf, 9);
107                delay_ms_DWT(1);
108                if(!lpuart_isRxBusy()){
109                    rxOldIndex += rxIndex;
110                    if(rxOldIndex > 255){
111                        rxOldIndex = 0;
112                        rxIndex = 0;
113                    }
114                    rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115                    for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116                        rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117                    }
118                }
119            }
120        }
121    //}
122    }
123    /* USER CODE END WHILE */
124
125    /* USER CODE BEGIN 3 */
126
127  /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132  /* USER CODE BEGIN LPUART1_Init 0 */
133
134  /* USER CODE END LPUART1_Init 0 */
135
136  LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140  /* Peripheral clock enable */
141  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144  /**LPUART1 GPIO Configuration
145  PB10   ------> LPUART1_RX
146  PB11   ------> LPUART1_TX
147  */
148  GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156  GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164  /* LPUART1 DMA Init */
165
166  /* LPUART1_TX Init */
167  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183  /* LPUART1_RX Init */
184  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200  /* LPUART1 interrupt Init */
201  NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202  NVIC_EnableIRQ(LPUART1_IRQn);
203
204  /* USER CODE BEGIN LPUART1_Init 1 */
205
206  /* USER CODE END LPUART1_Init 1 */
207  LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208  LPUART_InitStruct.BaudRate = 9600;
209  LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210  LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211  LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212  LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213  LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214  LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215  LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216  LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217  LL_LPUART_DisableFIFO(LPUART1);
218  LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219//  LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222  /* USER CODE BEGIN WKUPType LPUART1 */
223
224  /* USER CODE END WKUPType LPUART1 */
225
226  LL_LPUART_Enable(LPUART1);
227
228  /* Polling LPUART1 initialisation */
229  while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230  {
231  }
232  /* USER CODE BEGIN LPUART1_Init 2 */
233
234    //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235    /* Enable TC interrupts for RX */
236
237
238    /* Enable HT & TC interrupts for TX */
239    // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241    lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242    //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243    lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244    lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246    //LL_LPUART_EnableDirectionRx(LPUART1);
247    LL_LPUART_EnableDirectionTx(LPUART1);
248    //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250  /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef  USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef  uint8_t (*t_event_func)(void);
310typedef  void(*t_action_func)(void);
311typedef struct{
312    uint16_t txtc:1;
313    uint16_t tx_busy:1;
314    uint16_t dmatxtc:1;
315    uint16_t dmarxtc:1;
316    uint16_t start_tx:1;
317    uint16_t rx_read:1;
318    uint16_t buff_full:1;
319    uint16_t is_fsm_table_init:1;
320    uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327    t_state present_state;
328    t_event_func event1;
329    t_event_func event2;
330    t_action_func action1;
331    t_action_func action2;
332    t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337    t_state current_state;
338    t_state previous_state;
339    t_fsm_row stt_row[7];
340    uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347    return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351    return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354    return 1;
355}
356
357uint8_t ev_txtc(void){
358    return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362    return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366    return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371    return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375    return lpuart_event.buff_full;
376}
377
378void no_action(){
379    return;
380}
381
382void lpuart_init(void){
383    memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384    memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385    memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386    RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388    LL_LPUART_DisableIT_TC(LPUART1);
389    LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390    LL_LPUART_DisableDirectionRx(LPUART1);
391
392    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397    /*TX buffer address attached to DMA channel1  */
398    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399            (uint32_t)txBuf,
400            LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401            LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404    /*RX buffer address attached to DMA channel2  */
405    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406                LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407                (uint32_t)rxDMA_Buf,
408                LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411    LL_LPUART_EnableDMAReq_RX(LPUART1);
412    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416    LL_LPUART_EnableDirectionRx(LPUART1);
417    lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422    if(!lpuart_event.tx_busy){
423        lpuart_event.tx_busy = 1;
424        if(len < SIZE_TX_BUFF){
425            lpuart_event.start_tx = 1;
426            tempTxBuf = buff;
427            txLen = len;
428        }else{
429            /*  lpuart_event.start_tx = 0;
430                lpuart_event.buff_full = 1;*/
431            return 0;
432
433        }
434        return 1;
435    }else{
436        return 0;
437    }
438
439
440}
441
442void lpuart_transmit(){
443    memcpy(txBuf, tempTxBuf, txLen);
444    setTxDataLengthDMA(txLen);
445    LL_LPUART_EnableDMAReq_TX(LPUART1);
446    LL_LPUART_EnableDirectionTx(LPUART1);
447    LL_LPUART_EnableIT_TC(LPUART1);
448    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455    LL_LPUART_DisableIT_TC(LPUART1);
456    LL_LPUART_DisableDirectionTx(LPUART1);
457    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458    LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460    lpuart_event.txtc = 0;
461    lpuart_event.dmatxtc = 0;
462    lpuart_event.start_tx = 0;
463    lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466    LL_LPUART_DisableDirectionTx(LPUART1);
467    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468    /* Clear all flags */
469    LL_DMA_ClearFlag_TC1(DMA1);
470    LL_DMA_ClearFlag_TE1(DMA1);
471    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475    static uint16_t old_len = SIZE_DMA_RX_BUFF;
476    uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477    if(old_len != current_len ){
478        if(current_len > 0){
479            lpuart_event.rx_read = 1;
480        }
481    }
482    old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487    lpuart_event.ext_rxBusyFlag = 1;
488    if(lpuart_event.dmarxtc){
489        lpuart_event.dmarxtc = 0;
490    }
491    if(lpuart_event.rx_read){
492        lpuart_event.rx_read = 0;
493    }
494    pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495    if(pos > SIZE_DMA_RX_BUFF ){
496            pos = SIZE_DMA_RX_BUFF;
497        }
498    if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499          if (pos > old_pos) {
500              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501          }else{
502              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503              if(pos > 0){
504                  RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505              }
506          }
507    }
508    old_pos = pos;
509    lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519    lpuart_fsm_table.current_state = INIT;
520    lpuart_fsm_table.stt_row[0] = rowInit;
521    lpuart_fsm_table.stt_row[1] = rowReady;
522    lpuart_fsm_table.stt_row[2] = rowBusy;
523    lpuart_event.is_fsm_table_init = 1;
524    lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528    uint8_t ev = 0;
529
530    for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532        if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533            ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534            if(ev){
535                lpuart_fsm_table.stt_row[rowIndex].action1();
536                lpuart_fsm_table.stt_row[rowIndex].action2();
537                lpuart_fsm_table.current_state =  lpuart_fsm_table.stt_row[rowIndex].next_state;
538                lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539            }
540
541        }
542    }
543}
544
545void lpuar_read_task(){
546    check_rx_dma_buff();
547    if(ev_rx_read()){
548        lpuart_rx();
549    }
550
551}
552void lpuart_task(){
553
554    if(!lpuart_event.is_fsm_table_init){
555        fsm_table_init();
556    }
557    //else{
558        lpuar_tx_fsm();
559        lpuar_read_task();
560    //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564    lpuart_event.txtc = 1;
565    LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570    lpuart_event.dmatxtc = 1;
571    LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575    if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576        LL_DMA_ClearFlag_TC2(DMA1);
577        lpuart_event.dmarxtc = 1;
578        lpuart_rx();
579    }
580    if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581        LL_DMA_ClearFlag_TE2(DMA1);
582    }
583
584}
585

Intrrupt routine file stm32g4xx_it.c:

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25  /* USER CODE BEGIN 1 */
26
27  /* USER CODE END 1 */
28
29  /* MCU Configuration--------------------------------------------------------*/
30
31  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38  /* System interrupt init*/
39  /* SysTick_IRQn interrupt configuration */
40  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42  /** Configure the internal voltage reference buffer voltage scale
43  */
44  LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45  /** Enable the Internal Voltage Reference buffer
46  */
47  LL_VREFBUF_Enable();
48  /** Configure the internal voltage reference buffer high impedance mode
49  */
50  LL_VREFBUF_DisableHIZ();
51  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52  */
53  LL_PWR_DisableUCPDDeadBattery();
54
55  /* USER CODE BEGIN Init */
56
57  /* USER CODE END Init */
58
59  /* Configure the system clock */
60  SystemClock_Config();
61
62  /* USER CODE BEGIN SysInit */
63
64  /* USER CODE END SysInit */
65
66  /* Initialize all configured peripherals */
67  MX_GPIO_Init();
68  MX_DMA_Init();
69  MX_LPUART1_UART_Init();
70  MX_RTC_Init();
71  /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73  lpuart_init_test();
74#endif
75  /* USER CODE END 2 */
76
77  /* Infinite loop */
78  /* USER CODE BEGIN WHILE */
79    LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80    //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81    LL_mDelay(1);
82    uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83    //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86    uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87    for(uint16_t i = 0 ; i<19 ; i++){
88        set_len_rx_dma_buff(len_test[i]);
89        lpuart_rx_test();
90    }
91#endif
92static uint8_t once = 1;
93    while (1)
94    {
95        lpuart_task();
96        //delay_ms_DWT(1);
97        /*if(once){
98            once = 0;
99            lpuart_start_tx(buf, 9);
100            LL_mDelay(100);
101        }*/
102
103        if(1){
104            //lpuart_start_tx(buf, 9);
105            if(!lpuart_isTxBusy()){
106                lpuart_start_tx(buf, 9);
107                delay_ms_DWT(1);
108                if(!lpuart_isRxBusy()){
109                    rxOldIndex += rxIndex;
110                    if(rxOldIndex > 255){
111                        rxOldIndex = 0;
112                        rxIndex = 0;
113                    }
114                    rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115                    for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116                        rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117                    }
118                }
119            }
120        }
121    //}
122    }
123    /* USER CODE END WHILE */
124
125    /* USER CODE BEGIN 3 */
126
127  /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132  /* USER CODE BEGIN LPUART1_Init 0 */
133
134  /* USER CODE END LPUART1_Init 0 */
135
136  LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140  /* Peripheral clock enable */
141  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144  /**LPUART1 GPIO Configuration
145  PB10   ------> LPUART1_RX
146  PB11   ------> LPUART1_TX
147  */
148  GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156  GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164  /* LPUART1 DMA Init */
165
166  /* LPUART1_TX Init */
167  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183  /* LPUART1_RX Init */
184  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200  /* LPUART1 interrupt Init */
201  NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202  NVIC_EnableIRQ(LPUART1_IRQn);
203
204  /* USER CODE BEGIN LPUART1_Init 1 */
205
206  /* USER CODE END LPUART1_Init 1 */
207  LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208  LPUART_InitStruct.BaudRate = 9600;
209  LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210  LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211  LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212  LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213  LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214  LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215  LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216  LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217  LL_LPUART_DisableFIFO(LPUART1);
218  LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219//  LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222  /* USER CODE BEGIN WKUPType LPUART1 */
223
224  /* USER CODE END WKUPType LPUART1 */
225
226  LL_LPUART_Enable(LPUART1);
227
228  /* Polling LPUART1 initialisation */
229  while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230  {
231  }
232  /* USER CODE BEGIN LPUART1_Init 2 */
233
234    //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235    /* Enable TC interrupts for RX */
236
237
238    /* Enable HT & TC interrupts for TX */
239    // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241    lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242    //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243    lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244    lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246    //LL_LPUART_EnableDirectionRx(LPUART1);
247    LL_LPUART_EnableDirectionTx(LPUART1);
248    //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250  /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef  USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef  uint8_t (*t_event_func)(void);
310typedef  void(*t_action_func)(void);
311typedef struct{
312    uint16_t txtc:1;
313    uint16_t tx_busy:1;
314    uint16_t dmatxtc:1;
315    uint16_t dmarxtc:1;
316    uint16_t start_tx:1;
317    uint16_t rx_read:1;
318    uint16_t buff_full:1;
319    uint16_t is_fsm_table_init:1;
320    uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327    t_state present_state;
328    t_event_func event1;
329    t_event_func event2;
330    t_action_func action1;
331    t_action_func action2;
332    t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337    t_state current_state;
338    t_state previous_state;
339    t_fsm_row stt_row[7];
340    uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347    return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351    return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354    return 1;
355}
356
357uint8_t ev_txtc(void){
358    return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362    return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366    return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371    return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375    return lpuart_event.buff_full;
376}
377
378void no_action(){
379    return;
380}
381
382void lpuart_init(void){
383    memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384    memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385    memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386    RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388    LL_LPUART_DisableIT_TC(LPUART1);
389    LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390    LL_LPUART_DisableDirectionRx(LPUART1);
391
392    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397    /*TX buffer address attached to DMA channel1  */
398    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399            (uint32_t)txBuf,
400            LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401            LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404    /*RX buffer address attached to DMA channel2  */
405    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406                LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407                (uint32_t)rxDMA_Buf,
408                LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411    LL_LPUART_EnableDMAReq_RX(LPUART1);
412    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416    LL_LPUART_EnableDirectionRx(LPUART1);
417    lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422    if(!lpuart_event.tx_busy){
423        lpuart_event.tx_busy = 1;
424        if(len < SIZE_TX_BUFF){
425            lpuart_event.start_tx = 1;
426            tempTxBuf = buff;
427            txLen = len;
428        }else{
429            /*  lpuart_event.start_tx = 0;
430                lpuart_event.buff_full = 1;*/
431            return 0;
432
433        }
434        return 1;
435    }else{
436        return 0;
437    }
438
439
440}
441
442void lpuart_transmit(){
443    memcpy(txBuf, tempTxBuf, txLen);
444    setTxDataLengthDMA(txLen);
445    LL_LPUART_EnableDMAReq_TX(LPUART1);
446    LL_LPUART_EnableDirectionTx(LPUART1);
447    LL_LPUART_EnableIT_TC(LPUART1);
448    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455    LL_LPUART_DisableIT_TC(LPUART1);
456    LL_LPUART_DisableDirectionTx(LPUART1);
457    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458    LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460    lpuart_event.txtc = 0;
461    lpuart_event.dmatxtc = 0;
462    lpuart_event.start_tx = 0;
463    lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466    LL_LPUART_DisableDirectionTx(LPUART1);
467    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468    /* Clear all flags */
469    LL_DMA_ClearFlag_TC1(DMA1);
470    LL_DMA_ClearFlag_TE1(DMA1);
471    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475    static uint16_t old_len = SIZE_DMA_RX_BUFF;
476    uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477    if(old_len != current_len ){
478        if(current_len > 0){
479            lpuart_event.rx_read = 1;
480        }
481    }
482    old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487    lpuart_event.ext_rxBusyFlag = 1;
488    if(lpuart_event.dmarxtc){
489        lpuart_event.dmarxtc = 0;
490    }
491    if(lpuart_event.rx_read){
492        lpuart_event.rx_read = 0;
493    }
494    pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495    if(pos > SIZE_DMA_RX_BUFF ){
496            pos = SIZE_DMA_RX_BUFF;
497        }
498    if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499          if (pos > old_pos) {
500              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501          }else{
502              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503              if(pos > 0){
504                  RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505              }
506          }
507    }
508    old_pos = pos;
509    lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519    lpuart_fsm_table.current_state = INIT;
520    lpuart_fsm_table.stt_row[0] = rowInit;
521    lpuart_fsm_table.stt_row[1] = rowReady;
522    lpuart_fsm_table.stt_row[2] = rowBusy;
523    lpuart_event.is_fsm_table_init = 1;
524    lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528    uint8_t ev = 0;
529
530    for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532        if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533            ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534            if(ev){
535                lpuart_fsm_table.stt_row[rowIndex].action1();
536                lpuart_fsm_table.stt_row[rowIndex].action2();
537                lpuart_fsm_table.current_state =  lpuart_fsm_table.stt_row[rowIndex].next_state;
538                lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539            }
540
541        }
542    }
543}
544
545void lpuar_read_task(){
546    check_rx_dma_buff();
547    if(ev_rx_read()){
548        lpuart_rx();
549    }
550
551}
552void lpuart_task(){
553
554    if(!lpuart_event.is_fsm_table_init){
555        fsm_table_init();
556    }
557    //else{
558        lpuar_tx_fsm();
559        lpuar_read_task();
560    //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564    lpuart_event.txtc = 1;
565    LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570    lpuart_event.dmatxtc = 1;
571    LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575    if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576        LL_DMA_ClearFlag_TC2(DMA1);
577        lpuart_event.dmarxtc = 1;
578        lpuart_rx();
579    }
580    if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581        LL_DMA_ClearFlag_TE2(DMA1);
582    }
583
584}
585/* Includes ------------------------------------------------------------------*/
586#include "main.h"
587#include "stm32g4xx_it.h"
588#include "lpuart.h"
589
590 extern _func_clbck lpuart_tx_tc_isr_clback;
591//_func_clbck lpuart_rx_rne_isr_clback = LPUART_RX_RXNE_ISR_CALLBACK;
592 extern _func_clbck lpuart_dma_tx_tc_isr_clback;
593 extern _func_clbck lpuart_dma_rx_tc_isr_clback;
594
595void HardFault_Handler(void)
596{
597  /* USER CODE BEGIN HardFault_IRQn 0 */
598
599  /* USER CODE END HardFault_IRQn 0 */
600  while (1)
601  {
602    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
603    /* USER CODE END W1_HardFault_IRQn 0 */
604  }
605}
606
607void DMA1_Channel2_IRQHandler(void)
608{
609  /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
610    lpuart_dma_rx_tc_isr_clback();
611    //LPUART_DMA_RX_TC_CALLBACK();
612  /* USER CODE END DMA1_Channel2_IRQn 0 */
613
614  /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
615
616  /* USER CODE END DMA1_Channel2_IRQn 1 */
617}
618

Some of the code I have ommitted here. I am sure that I have not fully understood how function pointers work. Could you please give me suggestions or a solution.

I am using: language: C11 Compiler/build tools: GNU tools for STM32 (7-2018-q2-update) IDE: STM32CubeIDE

Please let me know if you require more info. Thanks in advance.

ANSWER

Answered 2022-Feb-17 at 07:53

As per @Lundin's suggestion, I have put a watchpoint on lpuart_dma_rx_tc_isr_clback function pointer variable. It exposed the out of index bug in my code. The bug is inside while loop in main.c.

1#ifndef __MAIN_H
2#define __MAIN_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7/* USER CODE BEGIN ET */
8typedef void (*_func_clbck)(void);
9/* USER CODE END ET */
10 _func_clbck lpuart_tx_tc_isr_clback;
11//_func_clbck lpuart_rx_rne_isr_clback;
12 _func_clbck lpuart_dma_tx_tc_isr_clback;
13 _func_clbck lpuart_dma_rx_tc_isr_clback;
14
15/* USER CODE END Private defines */
16
17#ifdef __cplusplus
18}
19#endif
20
21#endif /* __MAIN_H */
22#include "main.h"
23int main(void)
24{
25  /* USER CODE BEGIN 1 */
26
27  /* USER CODE END 1 */
28
29  /* MCU Configuration--------------------------------------------------------*/
30
31  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
32
33  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_SYSCFG);
34  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_PWR);
35
36  NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
37
38  /* System interrupt init*/
39  /* SysTick_IRQn interrupt configuration */
40  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),1, 0));
41
42  /** Configure the internal voltage reference buffer voltage scale
43  */
44  LL_VREFBUF_SetVoltageScaling(LL_VREFBUF_VOLTAGE_SCALE1);
45  /** Enable the Internal Voltage Reference buffer
46  */
47  LL_VREFBUF_Enable();
48  /** Configure the internal voltage reference buffer high impedance mode
49  */
50  LL_VREFBUF_DisableHIZ();
51  /** Disable the internal Pull-Up in Dead Battery pins of UCPD peripheral
52  */
53  LL_PWR_DisableUCPDDeadBattery();
54
55  /* USER CODE BEGIN Init */
56
57  /* USER CODE END Init */
58
59  /* Configure the system clock */
60  SystemClock_Config();
61
62  /* USER CODE BEGIN SysInit */
63
64  /* USER CODE END SysInit */
65
66  /* Initialize all configured peripherals */
67  MX_GPIO_Init();
68  MX_DMA_Init();
69  MX_LPUART1_UART_Init();
70  MX_RTC_Init();
71  /* USER CODE BEGIN 2 */
72#ifdef LPUART_TEST
73  lpuart_init_test();
74#endif
75  /* USER CODE END 2 */
76
77  /* Infinite loop */
78  /* USER CODE BEGIN WHILE */
79    LL_GPIO_ResetOutputPin(GPIOC,LL_GPIO_PIN_6);
80    //LL_GPIO_SetOutputPin(GPIOC,LL_GPIO_PIN_6);
81    LL_mDelay(1);
82    uint8_t buf[9] ={'a','d','v',' ','l','o','w','\r','\n'};
83    //uint8_t buf[9] ={1,2,3,4,5,6,7,8,9};
84
85#ifdef LPUART_TEST
86    uint16_t len_test[19] = {0,16,17,65535, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
87    for(uint16_t i = 0 ; i<19 ; i++){
88        set_len_rx_dma_buff(len_test[i]);
89        lpuart_rx_test();
90    }
91#endif
92static uint8_t once = 1;
93    while (1)
94    {
95        lpuart_task();
96        //delay_ms_DWT(1);
97        /*if(once){
98            once = 0;
99            lpuart_start_tx(buf, 9);
100            LL_mDelay(100);
101        }*/
102
103        if(1){
104            //lpuart_start_tx(buf, 9);
105            if(!lpuart_isTxBusy()){
106                lpuart_start_tx(buf, 9);
107                delay_ms_DWT(1);
108                if(!lpuart_isRxBusy()){
109                    rxOldIndex += rxIndex;
110                    if(rxOldIndex > 255){
111                        rxOldIndex = 0;
112                        rxIndex = 0;
113                    }
114                    rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
115                    for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
116                        rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
117                    }
118                }
119            }
120        }
121    //}
122    }
123    /* USER CODE END WHILE */
124
125    /* USER CODE BEGIN 3 */
126
127  /* USER CODE END 3 */
128}
129static void MX_LPUART1_UART_Init(void)
130{
131
132  /* USER CODE BEGIN LPUART1_Init 0 */
133
134  /* USER CODE END LPUART1_Init 0 */
135
136  LL_LPUART_InitTypeDef LPUART_InitStruct = {0};
137
138  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
139
140  /* Peripheral clock enable */
141  LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_LPUART1);
142
143  LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
144  /**LPUART1 GPIO Configuration
145  PB10   ------> LPUART1_RX
146  PB11   ------> LPUART1_TX
147  */
148  GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
149  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
150  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
151  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
152  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
153  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
154  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
155
156  GPIO_InitStruct.Pin = LL_GPIO_PIN_11;
157  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
158  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
159  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
160  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
161  GPIO_InitStruct.Alternate = LL_GPIO_AF_8;
162  LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
163
164  /* LPUART1 DMA Init */
165
166  /* LPUART1_TX Init */
167  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_1, LL_DMAMUX_REQ_LPUART1_TX);
168
169  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1, LL_DMA_DIRECTION_MEMORY_TO_PERIPH);
170
171  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PRIORITY_HIGH);
172
173  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MODE_NORMAL);
174
175  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PERIPH_NOINCREMENT);
176
177  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MEMORY_INCREMENT);
178
179  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_PDATAALIGN_BYTE);
180
181  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_1, LL_DMA_MDATAALIGN_BYTE);
182
183  /* LPUART1_RX Init */
184  LL_DMA_SetPeriphRequest(DMA1, LL_DMA_CHANNEL_2, LL_DMAMUX_REQ_LPUART1_RX);
185
186  LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
187
188  LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PRIORITY_HIGH);
189
190  LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MODE_CIRCULAR);
191
192  LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PERIPH_NOINCREMENT);
193
194  LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MEMORY_INCREMENT);
195
196  LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_PDATAALIGN_BYTE);
197
198  LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_2, LL_DMA_MDATAALIGN_BYTE);
199
200  /* LPUART1 interrupt Init */
201  NVIC_SetPriority(LPUART1_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
202  NVIC_EnableIRQ(LPUART1_IRQn);
203
204  /* USER CODE BEGIN LPUART1_Init 1 */
205
206  /* USER CODE END LPUART1_Init 1 */
207  LPUART_InitStruct.PrescalerValue = LL_LPUART_PRESCALER_DIV1;
208  LPUART_InitStruct.BaudRate = 9600;
209  LPUART_InitStruct.DataWidth = LL_LPUART_DATAWIDTH_8B;
210  LPUART_InitStruct.StopBits = LL_LPUART_STOPBITS_1;
211  LPUART_InitStruct.Parity = LL_LPUART_PARITY_NONE;
212  LPUART_InitStruct.TransferDirection = LL_LPUART_DIRECTION_TX_RX;
213  LPUART_InitStruct.HardwareFlowControl = LL_LPUART_HWCONTROL_NONE;
214  LL_LPUART_Init(LPUART1, &LPUART_InitStruct);
215  LL_LPUART_SetTXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
216  LL_LPUART_SetRXFIFOThreshold(LPUART1, LL_LPUART_FIFOTHRESHOLD_1_8);
217  LL_LPUART_DisableFIFO(LPUART1);
218  LL_LPUART_SetTXRXSwap(LPUART1, LL_LPUART_TXRX_SWAPPED);
219//  LL_LPUART_EnableOverrunDetect(LPUART1);
220 // LL_LPUART_EnableDMADeactOnRxErr(LPUART1);
221
222  /* USER CODE BEGIN WKUPType LPUART1 */
223
224  /* USER CODE END WKUPType LPUART1 */
225
226  LL_LPUART_Enable(LPUART1);
227
228  /* Polling LPUART1 initialisation */
229  while((!(LL_LPUART_IsActiveFlag_TEACK(LPUART1))) || (!(LL_LPUART_IsActiveFlag_REACK(LPUART1))))
230  {
231  }
232  /* USER CODE BEGIN LPUART1_Init 2 */
233
234    //LL_LPUART_EnableIT_TXE_TXFNF(LPUART1);
235    /* Enable TC interrupts for RX */
236
237
238    /* Enable HT & TC interrupts for TX */
239    // LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
240
241    lpuart_tx_tc_isr_clback = LPUART_TX_TC_ISR_CALLBACK;
242    //lpuart_rx_rne_isr_clback = &LPUART_RX_RXNE_ISR_CALLBACK;
243    lpuart_dma_tx_tc_isr_clback = LPUART_DMA_TX_TC_CALLBACK;
244    lpuart_dma_rx_tc_isr_clback = LPUART_DMA_RX_TC_CALLBACK;
245
246    //LL_LPUART_EnableDirectionRx(LPUART1);
247    LL_LPUART_EnableDirectionTx(LPUART1);
248    //LL_LPUART_EnableIT_RXNE_RXFNE(LPUART1);
249
250  /* USER CODE END LPUART1_Init 2 */
251
252}
253#ifndef INC_LPUART_H_
254#define INC_LPUART_H_
255
256#include "ring_buffer.h"
257
258#ifdef  USE_FULL_ASSERT
259#include "stm32_assert.h"
260#else
261#define assert_param(expr) ((void)0U)
262#endif /* USE_FULL_ASSERT */
263
264uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len );
265uint8_t LPUART_isTxFinished(void);
266void LPUART_clear_tx_finishedFlag();
267uint8_t lpuart_isRxBusy(void);
268uint8_t lpuart_isTxBusy(void);
269void lpuart_task();
270
271void LPUART_TX_TC_ISR_CALLBACK(void);
272void LPUART_DMA_TX_TC_CALLBACK(void);
273void LPUART_DMA_RX_TC_CALLBACK(void);
274
275#endif /* INC_LPUART_H_ */
276#include "lpuart.h"
277#include "string.h"
278#include "stm32g4xx_ll_lpuart.h"
279#include "stm32g4xx_ll_dma.h"
280
281#define SIZE_TX_BUFF 256
282#define SIZE_RX_BUFF 256
283#define SIZE_DMA_RX_BUFF 64
284
285
286static uint8_t rxBuf[SIZE_RX_BUFF];
287static uint8_t rxDMA_Buf[SIZE_DMA_RX_BUFF];
288static uint8_t txBuf[SIZE_TX_BUFF];
289RingBuffer lpuart_RX_ring_buff;
290static uint8_t* tempTxBuf;
291static uint16_t txLen = 0;
292
293
294static void setTxDataLengthDMA(uint16_t len);
295static void lpuart_transmit();
296static void lpuart_finished_tx();
297static void no_action();
298static void lpuart_rx();
299static void check_rx_dma_buff();
300
301static uint8_t ev_no_event(void);
302static uint8_t ev_txtc(void);
303static uint8_t ev_start_tx(void);
304static uint8_t ev_dmatxtc(void);
305static uint8_t ev_rx_read(void);
306static uint8_t ev_buff_full(void);
307
308
309typedef  uint8_t (*t_event_func)(void);
310typedef  void(*t_action_func)(void);
311typedef struct{
312    uint16_t txtc:1;
313    uint16_t tx_busy:1;
314    uint16_t dmatxtc:1;
315    uint16_t dmarxtc:1;
316    uint16_t start_tx:1;
317    uint16_t rx_read:1;
318    uint16_t buff_full:1;
319    uint16_t is_fsm_table_init:1;
320    uint16_t ext_rxBusyFlag:1;
321
322}t_event;
323
324typedef enum {INIT, READY, BUSY, COMPLETE, LPUART_ERROR}t_state;
325
326typedef struct{
327    t_state present_state;
328    t_event_func event1;
329    t_event_func event2;
330    t_action_func action1;
331    t_action_func action2;
332    t_state next_state;
333
334}t_fsm_row;
335
336typedef struct{
337    t_state current_state;
338    t_state previous_state;
339    t_fsm_row stt_row[7];
340    uint16_t number_of_rows;
341}t_fsm_table;
342
343
344t_event lpuart_event;
345
346uint8_t lpuart_isTxBusy(void){
347    return lpuart_event.tx_busy;
348}
349
350uint8_t lpuart_isRxBusy(){
351    return lpuart_event.ext_rxBusyFlag;
352}
353uint8_t ev_no_event(void){
354    return 1;
355}
356
357uint8_t ev_txtc(void){
358    return lpuart_event.txtc;
359}
360
361uint8_t ev_start_tx(void){
362    return lpuart_event.start_tx;
363}
364
365uint8_t ev_dmatxtc(void){
366    return lpuart_event.dmatxtc;
367}
368
369
370uint8_t ev_rx_read(void){
371    return lpuart_event.rx_read || lpuart_event.dmarxtc;
372}
373
374uint8_t ev_buff_full(void){
375    return lpuart_event.buff_full;
376}
377
378void no_action(){
379    return;
380}
381
382void lpuart_init(void){
383    memset(rxBuf, 0, (size_t)SIZE_RX_BUFF );
384    memset(rxDMA_Buf, 0, (size_t)SIZE_DMA_RX_BUFF );
385    memset(txBuf, 0, (size_t)SIZE_TX_BUFF );
386    RingBuffer_init(&lpuart_RX_ring_buff,rxBuf , (uint16_t)SIZE_RX_BUFF);
387
388    LL_LPUART_DisableIT_TC(LPUART1);
389    LL_LPUART_DisableIT_RXNE_RXFNE(LPUART1);
390    LL_LPUART_DisableDirectionRx(LPUART1);
391
392    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1); //tx
393    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1); //tx
394    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
395    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
396
397    /*TX buffer address attached to DMA channel1  */
398    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_1,
399            (uint32_t)txBuf,
400            LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_TRANSMIT),
401            LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_1));
402    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, SIZE_TX_BUFF);
403
404    /*RX buffer address attached to DMA channel2  */
405    LL_DMA_ConfigAddresses(DMA1, LL_DMA_CHANNEL_2,
406                LL_LPUART_DMA_GetRegAddr(LPUART1, LL_LPUART_DMA_REG_DATA_RECEIVE),
407                (uint32_t)rxDMA_Buf,
408                LL_DMA_GetDataTransferDirection(DMA1, LL_DMA_CHANNEL_2));
409    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_2, SIZE_DMA_RX_BUFF);
410
411    LL_LPUART_EnableDMAReq_RX(LPUART1);
412    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_2); //rx
413    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_2);
414    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_2); //rx
415
416    LL_LPUART_EnableDirectionRx(LPUART1);
417    lpuart_event.tx_busy = 0;
418}
419
420
421uint8_t lpuart_start_tx(uint8_t* buff, uint16_t len ){
422    if(!lpuart_event.tx_busy){
423        lpuart_event.tx_busy = 1;
424        if(len < SIZE_TX_BUFF){
425            lpuart_event.start_tx = 1;
426            tempTxBuf = buff;
427            txLen = len;
428        }else{
429            /*  lpuart_event.start_tx = 0;
430                lpuart_event.buff_full = 1;*/
431            return 0;
432
433        }
434        return 1;
435    }else{
436        return 0;
437    }
438
439
440}
441
442void lpuart_transmit(){
443    memcpy(txBuf, tempTxBuf, txLen);
444    setTxDataLengthDMA(txLen);
445    LL_LPUART_EnableDMAReq_TX(LPUART1);
446    LL_LPUART_EnableDirectionTx(LPUART1);
447    LL_LPUART_EnableIT_TC(LPUART1);
448    LL_DMA_EnableIT_TC(DMA1, LL_DMA_CHANNEL_1);
449    LL_DMA_EnableIT_TE(DMA1, LL_DMA_CHANNEL_1);
450    LL_DMA_EnableChannel(DMA1, LL_DMA_CHANNEL_1);
451}
452
453
454void lpuart_finished_tx(){
455    LL_LPUART_DisableIT_TC(LPUART1);
456    LL_LPUART_DisableDirectionTx(LPUART1);
457    LL_DMA_DisableIT_TC(DMA1, LL_DMA_CHANNEL_1);
458    LL_DMA_DisableIT_TE(DMA1, LL_DMA_CHANNEL_1);
459    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
460    lpuart_event.txtc = 0;
461    lpuart_event.dmatxtc = 0;
462    lpuart_event.start_tx = 0;
463    lpuart_event.tx_busy = 0;
464}
465void setTxDataLengthDMA(uint16_t len){
466    LL_LPUART_DisableDirectionTx(LPUART1);
467    LL_DMA_DisableChannel(DMA1, LL_DMA_CHANNEL_1);
468    /* Clear all flags */
469    LL_DMA_ClearFlag_TC1(DMA1);
470    LL_DMA_ClearFlag_TE1(DMA1);
471    LL_DMA_SetDataLength(DMA1, LL_DMA_CHANNEL_1, len);
472}
473
474void check_rx_dma_buff(){
475    static uint16_t old_len = SIZE_DMA_RX_BUFF;
476    uint16_t current_len = LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
477    if(old_len != current_len ){
478        if(current_len > 0){
479            lpuart_event.rx_read = 1;
480        }
481    }
482    old_len = current_len;
483}
484static uint16_t old_pos = 0;
485uint16_t pos = 0;
486void lpuart_rx(){
487    lpuart_event.ext_rxBusyFlag = 1;
488    if(lpuart_event.dmarxtc){
489        lpuart_event.dmarxtc = 0;
490    }
491    if(lpuart_event.rx_read){
492        lpuart_event.rx_read = 0;
493    }
494    pos = (uint16_t)SIZE_DMA_RX_BUFF - LL_DMA_GetDataLength(DMA1, LL_DMA_CHANNEL_2);
495    if(pos > SIZE_DMA_RX_BUFF ){
496            pos = SIZE_DMA_RX_BUFF;
497        }
498    if(pos != old_pos /* || (pos == 0 && old_pos == 0)*/){
499          if (pos > old_pos) {
500              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],(pos - old_pos));
501          }else{
502              RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[old_pos],((uint16_t)SIZE_DMA_RX_BUFF - old_pos));
503              if(pos > 0){
504                  RingBuffer_writeMeasBlock(&lpuart_RX_ring_buff,&rxDMA_Buf[0],pos);
505              }
506          }
507    }
508    old_pos = pos;
509    lpuart_event.ext_rxBusyFlag = 0;
510
511}
512t_fsm_row rowInit = {INIT,ev_no_event, ev_no_event, lpuart_init, no_action, READY };
513t_fsm_row rowReady = {READY,ev_start_tx, ev_no_event, lpuart_transmit, no_action, BUSY };
514t_fsm_row rowBusy = {BUSY,ev_dmatxtc, ev_txtc, lpuart_finished_tx, no_action, READY};
515
516
517t_fsm_table lpuart_fsm_table = {INIT,INIT, {}};
518void fsm_table_init(){
519    lpuart_fsm_table.current_state = INIT;
520    lpuart_fsm_table.stt_row[0] = rowInit;
521    lpuart_fsm_table.stt_row[1] = rowReady;
522    lpuart_fsm_table.stt_row[2] = rowBusy;
523    lpuart_event.is_fsm_table_init = 1;
524    lpuart_fsm_table.number_of_rows = 3;
525}
526
527void lpuar_tx_fsm(){
528    uint8_t ev = 0;
529
530    for(uint16_t rowIndex = 0; rowIndex < lpuart_fsm_table.number_of_rows; rowIndex++){
531
532        if(lpuart_fsm_table.current_state == lpuart_fsm_table.stt_row[rowIndex].present_state){
533            ev = lpuart_fsm_table.stt_row[rowIndex].event1() && lpuart_fsm_table.stt_row[rowIndex].event2();
534            if(ev){
535                lpuart_fsm_table.stt_row[rowIndex].action1();
536                lpuart_fsm_table.stt_row[rowIndex].action2();
537                lpuart_fsm_table.current_state =  lpuart_fsm_table.stt_row[rowIndex].next_state;
538                lpuart_fsm_table.previous_state = lpuart_fsm_table.stt_row[rowIndex].present_state;
539            }
540
541        }
542    }
543}
544
545void lpuar_read_task(){
546    check_rx_dma_buff();
547    if(ev_rx_read()){
548        lpuart_rx();
549    }
550
551}
552void lpuart_task(){
553
554    if(!lpuart_event.is_fsm_table_init){
555        fsm_table_init();
556    }
557    //else{
558        lpuar_tx_fsm();
559        lpuar_read_task();
560    //}
561
562}
563void LPUART_TX_TC_ISR_CALLBACK(void){
564    lpuart_event.txtc = 1;
565    LL_LPUART_ClearFlag_TC(LPUART1);
566
567}
568
569void LPUART_DMA_TX_TC_CALLBACK(void){
570    lpuart_event.dmatxtc = 1;
571    LL_DMA_ClearFlag_TC1(DMA1);
572}
573
574void LPUART_DMA_RX_TC_CALLBACK(void){
575    if(LL_DMA_IsActiveFlag_TC2(DMA1)){
576        LL_DMA_ClearFlag_TC2(DMA1);
577        lpuart_event.dmarxtc = 1;
578        lpuart_rx();
579    }
580    if(LL_DMA_IsActiveFlag_TE2(DMA1)){
581        LL_DMA_ClearFlag_TE2(DMA1);
582    }
583
584}
585/* Includes ------------------------------------------------------------------*/
586#include "main.h"
587#include "stm32g4xx_it.h"
588#include "lpuart.h"
589
590 extern _func_clbck lpuart_tx_tc_isr_clback;
591//_func_clbck lpuart_rx_rne_isr_clback = LPUART_RX_RXNE_ISR_CALLBACK;
592 extern _func_clbck lpuart_dma_tx_tc_isr_clback;
593 extern _func_clbck lpuart_dma_rx_tc_isr_clback;
594
595void HardFault_Handler(void)
596{
597  /* USER CODE BEGIN HardFault_IRQn 0 */
598
599  /* USER CODE END HardFault_IRQn 0 */
600  while (1)
601  {
602    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
603    /* USER CODE END W1_HardFault_IRQn 0 */
604  }
605}
606
607void DMA1_Channel2_IRQHandler(void)
608{
609  /* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
610    lpuart_dma_rx_tc_isr_clback();
611    //LPUART_DMA_RX_TC_CALLBACK();
612  /* USER CODE END DMA1_Channel2_IRQn 0 */
613
614  /* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
615
616  /* USER CODE END DMA1_Channel2_IRQn 1 */
617}
618 rxIndex = RingBuffer_available(&lpuart_RX_ring_buff);
619 for(i = rxOldIndex ; i < (rxIndex+rxOldIndex) ; i++ ){
620    rxBuff[i] = RingBuffer_readMeas(&lpuart_RX_ring_buff);
621     ....
622  }
623

It was also pointed out that function pointer variable shouldn't be in flash.

Source https://stackoverflow.com/questions/71139143

QUESTION

Running into an error when trying to pip install python-docx

Asked 2022-Feb-06 at 17:04

I just did a fresh install of windows to clean up my computer, moved everything over to my D drive and installed Python through Windows Store (somehow it defaulted to my C drive, so I left it there because Pycharm was getting confused about its location), now I'm trying to pip install the python-docx module for the first time and I'm stuck. I have a recent version of Microsoft C++ Visual Build Tools installed. Excuse me for any irrelevant information I provided, just wishing to be thorough. Here's what's returning in command:

1.>pip install python-docx
2Collecting python-docx
3  Using cached python-docx-0.8.11.tar.gz (5.6 MB)
4  Preparing metadata (setup.py) ... done
5Collecting lxml>=2.3.2
6  Using cached lxml-4.6.3.tar.gz (3.2 MB)
7  Preparing metadata (setup.py) ... done
8Using legacy 'setup.py install' for python-docx, since package 'wheel' is not installed.
9Using legacy 'setup.py install' for lxml, since package 'wheel' is not installed.
10Installing collected packages: lxml, python-docx
11    Running setup.py install for lxml ... error
12    ERROR: Command errored out with exit status 1:
13     command: 'C:\Users\cahez\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"'; __file__='"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\cahez\AppData\Local\Temp\pip-record-xpg_v_i_\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Include\lxml'
14         cwd: C:\Users\cahez\AppData\Local\Temp\pip-install-8rz9vrlv\lxml_69e9fa188fd042d6953641882e4b3a17\
15    Complete output (76 lines):
16    Building lxml version 4.6.3.
17    Building without Cython.
18    Building against pre-built libxml2 andl libxslt libraries
19    running install
20    C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
21      warnings.warn(
22    running build
23    running build_py
24    creating build
25    creating build\lib.win-amd64-3.10
26    creating build\lib.win-amd64-3.10\lxml
27    copying src\lxml\builder.py -> build\lib.win-amd64-3.10\lxml
28    copying src\lxml\cssselect.py -> build\lib.win-amd64-3.10\lxml
29    copying src\lxml\doctestcompare.py -> build\lib.win-amd64-3.10\lxml
30    copying src\lxml\ElementInclude.py -> build\lib.win-amd64-3.10\lxml
31    copying src\lxml\pyclasslookup.py -> build\lib.win-amd64-3.10\lxml
32    copying src\lxml\sax.py -> build\lib.win-amd64-3.10\lxml
33    copying src\lxml\usedoctest.py -> build\lib.win-amd64-3.10\lxml
34    copying src\lxml\_elementpath.py -> build\lib.win-amd64-3.10\lxml
35    copying src\lxml\__init__.py -> build\lib.win-amd64-3.10\lxml
36    creating build\lib.win-amd64-3.10\lxml\includes
37    copying src\lxml\includes\__init__.py -> build\lib.win-amd64-3.10\lxml\includes
38    creating build\lib.win-amd64-3.10\lxml\html
39    copying src\lxml\html\builder.py -> build\lib.win-amd64-3.10\lxml\html
40    copying src\lxml\html\clean.py -> build\lib.win-amd64-3.10\lxml\html
41    copying src\lxml\html\defs.py -> build\lib.win-amd64-3.10\lxml\html
42    copying src\lxml\html\diff.py -> build\lib.win-amd64-3.10\lxml\html
43    copying src\lxml\html\ElementSoup.py -> build\lib.win-amd64-3.10\lxml\html
44    copying src\lxml\html\formfill.py -> build\lib.win-amd64-3.10\lxml\html
45    copying src\lxml\html\html5parser.py -> build\lib.win-amd64-3.10\lxml\html
46    copying src\lxml\html\soupparser.py -> build\lib.win-amd64-3.10\lxml\html
47    copying src\lxml\html\usedoctest.py -> build\lib.win-amd64-3.10\lxml\html
48    copying src\lxml\html\_diffcommand.py -> build\lib.win-amd64-3.10\lxml\html
49    copying src\lxml\html\_html5builder.py -> build\lib.win-amd64-3.10\lxml\html
50    copying src\lxml\html\_setmixin.py -> build\lib.win-amd64-3.10\lxml\html
51    copying src\lxml\html\__init__.py -> build\lib.win-amd64-3.10\lxml\html
52    creating build\lib.win-amd64-3.10\lxml\isoschematron
53    copying src\lxml\isoschematron\__init__.py -> build\lib.win-amd64-3.10\lxml\isoschematron
54    copying src\lxml\etree.h -> build\lib.win-amd64-3.10\lxml
55    copying src\lxml\etree_api.h -> build\lib.win-amd64-3.10\lxml
56    copying src\lxml\lxml.etree.h -> build\lib.win-amd64-3.10\lxml
57    copying src\lxml\lxml.etree_api.h -> build\lib.win-amd64-3.10\lxml
58    copying src\lxml\includes\c14n.pxd -> build\lib.win-amd64-3.10\lxml\includes
59    copying src\lxml\includes\config.pxd -> build\lib.win-amd64-3.10\lxml\includes
60    copying src\lxml\includes\dtdvalid.pxd -> build\lib.win-amd64-3.10\lxml\includes
61    copying src\lxml\includes\etreepublic.pxd -> build\lib.win-amd64-3.10\lxml\includes
62    copying src\lxml\includes\htmlparser.pxd -> build\lib.win-amd64-3.10\lxml\includes
63    copying src\lxml\includes\relaxng.pxd -> build\lib.win-amd64-3.10\lxml\includes
64    copying src\lxml\includes\schematron.pxd -> build\lib.win-amd64-3.10\lxml\includes
65    copying src\lxml\includes\tree.pxd -> build\lib.win-amd64-3.10\lxml\includes
66    copying src\lxml\includes\uri.pxd -> build\lib.win-amd64-3.10\lxml\includes
67    copying src\lxml\includes\xinclude.pxd -> build\lib.win-amd64-3.10\lxml\includes
68    copying src\lxml\includes\xmlerror.pxd -> build\lib.win-amd64-3.10\lxml\includes
69    copying src\lxml\includes\xmlparser.pxd -> build\lib.win-amd64-3.10\lxml\includes
70    copying src\lxml\includes\xmlschema.pxd -> build\lib.win-amd64-3.10\lxml\includes
71    copying src\lxml\includes\xpath.pxd -> build\lib.win-amd64-3.10\lxml\includes
72    copying src\lxml\includes\xslt.pxd -> build\lib.win-amd64-3.10\lxml\includes
73    copying src\lxml\includes\__init__.pxd -> build\lib.win-amd64-3.10\lxml\includes
74    copying src\lxml\includes\etree_defs.h -> build\lib.win-amd64-3.10\lxml\includes
75    copying src\lxml\includes\lxml-version.h -> build\lib.win-amd64-3.10\lxml\includes
76    creating build\lib.win-amd64-3.10\lxml\isoschematron\resources
77    creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\rng
78    copying src\lxml\isoschematron\resources\rng\iso-schematron.rng -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\rng
79    creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
80    copying src\lxml\isoschematron\resources\xsl\RNG2Schtrn.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
81    copying src\lxml\isoschematron\resources\xsl\XSD2Schtrn.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl
82    creating build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
83    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_abstract_expand.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
84    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_dsdl_include.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
85    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_message.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
86    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_schematron_skeleton_for_xslt1.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
87    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\iso_svrl_for_xslt1.xsl -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
88    copying src\lxml\isoschematron\resources\xsl\iso-schematron-xslt1\readme.txt -> build\lib.win-amd64-3.10\lxml\isoschematron\resources\xsl\iso-schematron-xslt1
89    running build_ext
90    building 'lxml.etree' extension
91    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
92    ----------------------------------------
93ERROR: Command errored out with exit status 1: 'C:\Users\cahez\AppData\Local\Microsoft\WindowsApps\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\python.exe' -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"'; __file__='"'"'C:\\Users\\cahez\\AppData\\Local\\Temp\\pip-install-8rz9vrlv\\lxml_69e9fa188fd042d6953641882e4b3a17\\setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\cahez\AppData\Local\Temp\pip-record-xpg_v_i_\install-record.txt' --single-version-externally-managed --user --prefix= --compile --install-headers 'C:\Users\cahez\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\Include\lxml' Check the logs for full command output.
94

ANSWER

Answered 2022-Feb-06 at 17:04

One of the dependencies for python-docx is lxml. The latest stable version of lxml is 4.6.3, released on March 21, 2021. On PyPI there is no lxml wheel for 3.10, yet. So it try to compile from source and for that Microsoft Visual C++ 14.0 or greater is required, as stated in the error.

However you can manually install lxml, before install python-docx. Download and install unofficial binary from Gohlke Alternatively you can use pipwin to install it from Gohlke. Note there may still be problems with dependencies for lxml.

Of course, you can also downgrade to python3.9.

EDIT: As of 14 Dec 2021 the latest lxml version 4.7.1 supports python 3.10

Source https://stackoverflow.com/questions/69687604

Community Discussions contain sources that include Stack Exchange Network

Tutorials and Learning Resources in Build Tool

Tutorials and Learning Resources are not available at this moment for Build Tool

Share this Page

share link

Get latest updates on Build Tool