GitShow/facebook/redex
facebook

redex

A bytecode optimizer for Android apps

by facebook
Star on GitHubForkWebsite

C++

6.3k stars681 forks327 contributorsActive · 4h agoSince 2016v2026.04.30MIT

Meet the team

See all 327 on GitHub →
agampe
agampe1.5k contributions
nikolait-meta
nikolait-meta1.0k contributions
NTillmann
NTillmann788 contributions
thezhangwei
thezhangwei660 contributions
int3
int3576 contributions
wsanville
wsanville505 contributions
ssj933
ssj933387 contributions
xuhdev
xuhdev322 contributions

Languages

View on GitHub →
C++88.9%
Java4.6%
Python3.2%
Rust1.1%
Kotlin0.6%
M40.4%
Other1.2%

Commit activity

Last 12 weeks · 231 commits

Full graph →

Community health

4 of 6 standards met

Community profile →
75
✓README✓License✓Contributing✓Code of Conduct○Issue Template○PR Template

Recent PRs & issues

Active · Last activity 4h ago
See all on GitHub →
rootkiller6788
Fix IRList::structural_equals to ignore MFLOW_FALLTHROUGHOpenPR

Fixes #778 compared every entry in the IR lists, including no-ops, so two methods that differ only in the placement of a no-op (e.g. an unreferenced label lowered to FALLTHROUGH) were reported as not structurally equal. Trailing metadata/no-op entries after the last real instruction also caused a mismatch when the other list had already been fully consumed. This change skips metadata and FALLTHROUGH entries on both sides before each comparison step, and skips any remaining trailing no-ops after the main loop. Unit tests are added for leading and trailing FALLTHROUGH entries, plus a negative case ensuring real differences are still detected.

rootkiller6788 · 2d ago
pidanxiangjiao
when using debug_info_kind iodi2,line number from retrace stack is inaccurate.OpenIssue

Ref: https://github.sheincorp.cn/facebook/redex/issues/818 Hello , according to suggestions, current i use iodi2 for debug_info_kind and try to recover the stack trace with "redex/tools/python/symbolicator/symbolicator.py". i find the line number is a little bit after the right place which cause crash. Am i config right? or iodi2 debug info could be inaccurate in some cases? the config i use: the correct stack (retrace by r8retrace): inaccurate stack trace( after redex , retrace by symbolicator.py) i recovered is below, and i saw some weired string like "1a1c664416c38a8f31a661730f9fc0ba1e9f297230aed0cd05f2de4cd4225afa$0.run$bridge", there is no such string when i recover the stack with r8retrace from aab that is not be redexed.

pidanxiangjiao · 1w ago
xuweishun
redex build failedOpenIssue

autoreconf -ivf && ./configure && make errorlog: p -fno-common -DPIC -o checkers/.libs/DexLimitsChecker.o In file included from checkers/DexLimitsChecker.cpp:8: In file included from ./checkers/DexLimitsChecker.h:10: In file included from ./libredex/RedexPropertyChecker.h:12: In file included from ./libredex/DexStore.h:17: In file included from ./libredex/ConcurrentContainers.h:10: In file included from /usr/local/include/boost/intrusive/pointer_plus_bits.hpp:18: In file included from /usr/local/include/boost/intrusive/detail/mpl.hpp:26: /usr/local/include/boost/move/detail/type_traits.hpp:805:30: error: builtin __has_trivial_destructor is deprecated; use __is_trivially_destructible instead [-Werror,-Wdeprecated-builtins] { static const bool value = BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T); }; ^ /usr/local/include/boost/move/detail/type_traits.hpp:272:54: note: expanded from macro 'BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE' #define BOOST_MOVE_IS_TRIVIALLY_DESTRUCTIBLE(T) BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:128:51: note: expanded from macro 'BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR' define BOOST_MOVE_HAS_TRIVIAL_DESTRUCTOR(T) __has_trivial_destructor(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:812:30: error: builtin __has_trivial_constructor is deprecated; use __is_trivially_constructible instead [-Werror,-Wdeprecated-builtins] { static const bool value = BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T); }; ^ /usr/local/include/boost/move/detail/type_traits.hpp:246:62: note: expanded from macro 'BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE' #define BOOST_MOVE_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:119:52: note: expanded from macro 'BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR' define BOOST_MOVE_HAS_TRIVIAL_CONSTRUCTOR(T) __has_trivial_constructor(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:822:30: error: builtin __has_trivial_copy is deprecated; use __is_trivially_copyable instead [-Werror,-Wdeprecated-builtins] static const bool value = BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T); ^ /usr/local/include/boost/move/detail/type_traits.hpp:240:60: note: expanded from macro 'BOOST_MOVE_IS_TRIVIALLY_COPY_CONSTRUCTIBLE' BOOST_MOVE_HAS_TRIVIAL_COPY(T)) ^ /usr/local/include/boost/move/detail/type_traits.hpp:122:45: note: expanded from macro 'BOOST_MOVE_HAS_TRIVIAL_COPY' define BOOST_MOVE_HAS_TRIVIAL_COPY(T) __has_trivial_copy(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:840:30: error: builtin __has_trivial_assign is deprecated; use __is_trivially_assignable instead [-Werror,-Wdeprecated-builtins] static const bool value = BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE(T); ^ /usr/local/include/boost/move/detail/type_traits.hpp:260:58: note: expanded from macro 'BOOST_MOVE_IS_TRIVIALLY_COPY_ASSIGNABLE' BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T)) ^ /usr/local/include/boost/move/detail/type_traits.hpp:125:48: note: expanded from macro 'BOOST_MOVE_HAS_TRIVIAL_ASSIGN' define BOOST_MOVE_HAS_TRIVIAL_ASSIGN(T) (__has_trivial_assign(T) ) ^ /usr/local/include/boost/move/detail/type_traits.hpp:856:30: error: builtin __has_nothrow_constructor is deprecated; use __is_nothrow_constructible instead [-Werror,-Wdeprecated-builtins] { static const bool value = BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T); }; ^ /usr/local/include/boost/move/detail/type_traits.hpp:278:60: note: expanded from macro 'BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE' #define BOOST_MOVE_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:131:52: note: expanded from macro 'BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR' define BOOST_MOVE_HAS_NOTHROW_CONSTRUCTOR(T) __has_nothrow_constructor(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:863:30: error: builtin __has_nothrow_copy is deprecated; use __is_nothrow_constructible instead [-Werror,-Wdeprecated-builtins] { static const bool value = BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T); }; ^ /usr/local/include/boost/move/detail/type_traits.hpp:284:58: note: expanded from macro 'BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE' #define BOOST_MOVE_IS_NOTHROW_COPY_CONSTRUCTIBLE(T) BOOST_MOVE_HAS_NOTHROW_COPY(T) ^ /usr/local/include/boost/move/detail/type_traits.hpp:134:46: note: expanded from macro 'BOOST_MOVE_HAS_NOTHROW_COPY' define BOOST_MOVE_HAS_NOTHROW_COPY(T) (__has_nothrow_copy(T)) ^ In file included from checkers/DexLimitsChecker.cpp:8: In file included from ./checkers/DexLimitsChecker.h:10: In file included from ./libredex/RedexPropertyChecker.h:12: In file included from ./libredex/DexStore.h:19: In file included from ./libredex/DexClass.h:25: In file included from ./libredex/DexMemberRefs.h:10: In file included from /usr/local/include/boost/functional/hash.hpp:6: /usr/local/include/boost/container_hash/hash.hpp:130:33: error: no template named 'unary_function' in namespace 'std'; did you mean '__unary_function'? struct hash_base : std::unary_function {}; ~~~~~^~~~~~~~~~~~~~ __unary_function /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__functional/unary_function.h:46:1: note: '__unary_function' declared here using __unary_function = __unary_function_keep_layout_base; ^ In file included from checkers/DexLimitsChecker.cpp:8: In file included from ./checkers/DexLimitsChecker.h:10: In file included from ./libredex/RedexPropertyChecker.h:12: In file included from ./libredex/DexStore.h:19: In file included from ./libredex/DexClass.h:27: In file included from ./libredex/ReferencedState.h:11: In file included from /usr/local/include/boost/optional.hpp:15: In file included from /usr/local/include/boost/optional/optional.hpp:38: /usr/local/include/boost/type_traits/has_nothrow_constructor.hpp:27:84: error: builtin __has_nothrow_constructor is deprecated; use __is_nothrow_constructible instead [-Werror,-Wdeprecated-builtins] template struct has_nothrow_constructor : public integral_constant{}; ^ /usr/local/include/boost/type_traits/intrinsics.hpp:199:48: note: expanded from macro 'BOOST_HAS_NOTHROW_CONSTRUCTOR' define BOOST_HAS_NOTHROW_CONSTRUCTOR(T) (__has_nothrow_constructor(T) && is_default_constructible::value) ^ In file included from checkers/DexLimitsChecker.cpp:8: In file included from ./checkers/DexLimitsChecker.h:10: In file included from ./libredex/RedexPropertyChecker.h:12: In file included from ./libredex/DexStore.h:19: In file included from ./libredex/DexClass.h:27: In file included from ./libredex/ReferencedState.h:11: In file included from /usr/local/include/boost/optional.hpp:15: In file included from /usr/local/include/boost/optional/optional.hpp:47: In file included from /usr/local/include/boost/type_traits/is_nothrow_move_assignable.hpp:16: /usr/local/include/boost/type_traits/has_nothrow_assign.hpp:65:7: error: builtin __has_nothrow_assign is deprecated; use __is_nothrow_assignable instead [-Werror,-Wdeprecated-builtins] BOOST_HAS_NOTHROW_ASSIGN(T) ^ /usr/local/include/boost/type_traits/intrinsics.hpp:205:43: note: expanded from macro 'BOOST_HAS_NOTHROW_ASSIGN' define BOOST_HAS_NOTHROW_ASSIGN(T) (__has_nothrow_assign(T) && !is_volatile::value && is_assignable::value) ^ 9 errors generated. make[2]: [checkers/DexLimitsChecker.lo] Error 1 make[1]: [all-recursive] Error 1 make: *** [all] Error 2

xuweishun · 1w ago

Recent fixes

View closed PRs →
xuhdev
Dex integ tests with a pinned d8, raise Java to 11MergedPR

Differential Revision: D114800635

xuhdev · 2w ago
thezhangwei
Dex all integ tests with D8 instead of legacy dx (#995)MergedPR

Summary: Pull Request resolved: https://github.com/facebook/redex/pull/995 Differential Revision: D114747240

thezhangwei · 2w ago
wsanville
Update CMakeLists.txt for D108926729MergedPR

Differential Revision: D110341904

wsanville · 1mo ago
Structured data for AI agents

Repository: facebook/redex. Description: A bytecode optimizer for Android apps Stars: 6299, Forks: 681. Primary language: C++. Languages: C++ (88.9%), Java (4.6%), Python (3.2%), Rust (1.1%), Kotlin (0.6%). License: MIT. Homepage: https://fbredex.com/ Latest release: v2026.04.30 (2mo ago). Open PRs: 17, open issues: 56. Last activity: 4h ago. Community health: 75%. Top contributors: agampe, nikolait-meta, NTillmann, thezhangwei, int3, wsanville, ssj933, xuhdev, Feng23, bertmaher and others.

·@ofershap

Replace github.com with gitshow.dev