Compare commits

..

No commits in common. "rawhide" and "f36" have entirely different histories.

9 changed files with 8983 additions and 125 deletions

View file

@ -1,38 +0,0 @@
From d349fae010f6c780d76e89c5d6b81d45119137c0 Mon Sep 17 00:00:00 2001
From: Arnav Singh <me@arnavion.dev>
Date: Sat, 3 Aug 2024 21:55:23 -0700
Subject: [PATCH] Fix libusb enumeration to handle PINE64 PinePhone modem.
The PINE64 PinePhone modem exposes itself as an adb-accessible device over USB
but its device class is LIBUSB_CLASS_MISCELLANEOUS, so allow that too.
---
vendor/adb/client/usb_libusb.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/vendor/adb/client/usb_libusb.cpp b/vendor/adb/client/usb_libusb.cpp
index 6133e7c8..9af91eb7 100644
--- a/vendor/adb/client/usb_libusb.cpp
+++ b/vendor/adb/client/usb_libusb.cpp
@@ -364,8 +364,8 @@ struct LibusbConnection : public Connection {
}
bool FindInterface(libusb_device_descriptor* device_desc) {
- if (device_desc->bDeviceClass != LIBUSB_CLASS_PER_INTERFACE) {
- // Assume that all Android devices have the device class set to per interface.
+ if (device_desc->bDeviceClass != LIBUSB_CLASS_PER_INTERFACE && device_desc->bDeviceClass != LIBUSB_CLASS_MISCELLANEOUS) {
+ // Assume that all Android devices have the device class set to per interface or miscellaneous.
// TODO: Is this assumption valid?
VLOG(USB) << "skipping device with incorrect class at " << device_address_;
return false;
@@ -1039,7 +1039,7 @@ void usb_init() {
static_cast<libusb_hotplug_event>(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED |
LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT),
LIBUSB_HOTPLUG_ENUMERATE, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY,
- LIBUSB_CLASS_PER_INTERFACE, hotplug_callback, nullptr, nullptr);
+ LIBUSB_HOTPLUG_MATCH_ANY, hotplug_callback, nullptr, nullptr);
if (rc != LIBUSB_SUCCESS) {
LOG(FATAL) << "failed to register libusb hotplug callback";
--
2.46.0

View file

@ -1,36 +0,0 @@
From 36c605004ae1c75813181ffe4c59907016aaf9e9 Mon Sep 17 00:00:00 2001
From: Biswapriyo Nath <nathbappai@gmail.com>
Date: Tue, 22 Apr 2025 15:12:23 +0000
Subject: [PATCH] extras/libjsonpb: Fix incompatibility with protobuf v30
This commit fixes the following compiler error.
jsonpb.cpp:36:44: error: invalid operands to binary expression (
'basic_string<char, char_traits<char>, allocator<char>>' and
'internal::DescriptorStringView' (aka 'basic_string_view<char>'))
36 | return std::string(kTypeUrlPrefix) + "/" + message.GetDescriptor()->full_name();
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
More info here https://protobuf.dev/news/2024-10-02/#descriptor-apis
Change-Id: I3c76d51dfdfbe013eaa5031e6194bf5edae1be35
---
libjsonpb/parse/jsonpb.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/vendor/extras/libjsonpb/parse/jsonpb.cpp b/vendor/extras/libjsonpb/parse/jsonpb.cpp
index b342c2b..ebd71bf 100644
--- a/vendor/extras/libjsonpb/parse/jsonpb.cpp
+++ b/vendor/extras/libjsonpb/parse/jsonpb.cpp
@@ -33,7 +33,7 @@ using google::protobuf::util::TypeResolver;
static constexpr char kTypeUrlPrefix[] = "type.googleapis.com";
std::string GetTypeUrl(const Message& message) {
- return std::string(kTypeUrlPrefix) + "/" + message.GetDescriptor()->full_name();
+ return std::string(kTypeUrlPrefix) + "/" + std::string(message.GetDescriptor()->full_name());
}
ErrorOr<std::string> MessageToJsonString(const Message& message) {
--
2.49.0

View file

@ -1,34 +0,0 @@
From 55d30a3098c29431bcbeb2d2a5f1a0c40844c311 Mon Sep 17 00:00:00 2001
From: Fabien Sanglard <sanglardf@google.com>
Date: Mon, 23 Jun 2025 11:21:16 -0700
Subject: [PATCH] Make legacy USB driver default on Linux
Bug: 366314975
Bug: 398328647
Test: Manual
Flag: EXEMPT (adb.exe)
Change-Id: Id49df58587d3f479d263a5b2da1679a1e675feb5
---
client/transport_usb.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/vendor/adb/client/transport_usb.cpp b/vendor/adb/client/transport_usb.cpp
index 3b0b4906..d3b4929c 100644
--- a/vendor/adb/client/transport_usb.cpp
+++ b/vendor/adb/client/transport_usb.cpp
@@ -177,9 +177,9 @@ bool is_adb_interface(int usb_class, int usb_subclass, int usb_protocol) {
}
bool is_libusb_enabled() {
- bool enable = true;
-#if defined(_WIN32)
- enable = false;
+ bool enable = false;
+#if defined(__APPLE__)
+ enable = true;
#endif
char* env = getenv("ADB_LIBUSB");
if (env) {
--
2.52.0

8659
51-android.rules Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,42 @@
diff -up android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt
--- android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig 2022-07-13 18:44:44.000000000 +0200
+++ android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt 2022-11-06 08:51:50.692313421 +0100
@@ -117,27 +117,6 @@ target_link_libraries("${ANDROID_MKE2FS_
target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE
e2fsprogs/lib)
-add_executable(e2fsdroid
- e2fsprogs/contrib/android/e2fsdroid.c
- e2fsprogs/contrib/android/basefs_allocator.c
- e2fsprogs/contrib/android/block_range.c
- e2fsprogs/contrib/android/base_fs.c
- e2fsprogs/contrib/android/fsmap.c
- e2fsprogs/contrib/android/block_list.c
- e2fsprogs/contrib/android/perms.c)
-
-include(CheckIncludeFile)
-CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H)
-
-if(HAVE_SYS_TYPES_H)
- target_compile_definitions(e2fsdroid PUBLIC HAVE_SYS_TYPES_H)
-endif(HAVE_SYS_TYPES_H)
-
-target_link_libraries(e2fsdroid
- libext2fs libsparse libzip libcutils liblog libutil libbase libselinux libsepol z pcre2-8 pthread)
-target_include_directories(e2fsdroid PRIVATE
- e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc)
-
add_executable(ext2simg
e2fsprogs/contrib/android/ext2simg.c)
diff -up android-tools-33.0.3p1/vendor/CMakeLists.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.txt
--- android-tools-33.0.3p1/vendor/CMakeLists.txt.orig 2022-11-05 10:01:04.000000000 +0100
+++ android-tools-33.0.3p1/vendor/CMakeLists.txt 2022-11-06 09:09:11.351267287 +0100
@@ -89,7 +89,6 @@ install(TARGETS
lpmake
lpunpack
simg2img
- e2fsdroid
ext2simg
DESTINATION bin)

14
adb.service Normal file
View file

@ -0,0 +1,14 @@
# Systemd unit file for adb
[Unit]
Description=Android Debug Bridge (adb) service
[Service]
Type=forking
ExecStart=/usr/bin/adb start-server
ExecStop=/usr/bin/adb kill-server
PrivateTmp=yes
Environment=HOME=/var/lib/adb
[Install]
WantedBy=multi-user.target

View file

@ -1,26 +1,25 @@
%global _hardened_build 1
Name: android-tools Name: android-tools
Version: 35.0.2 Version: 33.0.3p1
Release: %autorelease Release: %autorelease
Epoch: 1 Epoch: 1
Summary: Android platform tools(adb, fastboot) Summary: Android platform tools(adb, fastboot)
# The entire source code is ASL 2.0 except boringssl which is BSD # The entire source code is ASL 2.0 except boringssl which is BSD
# Automatically converted from old format: ASL 2.0 and (ASL 2.0 and BSD) - review is highly recommended. License: ASL 2.0 and (ASL 2.0 and BSD)
License: Apache-2.0 AND (Apache-2.0 AND LicenseRef-Callaway-BSD)
URL: http://developer.android.com/guide/developing/tools/ URL: http://developer.android.com/guide/developing/tools/
# Sources with all needed patches and cmakelists live there now: # Sources with all needed patches and cmakelists live there now:
Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz
# https://github.com/nmeum/android-tools/issues/153 Source1: 51-android.rules
Patch0: 0001-Fix-libusb-enumeration.patch Source2: adb.service
# https://github.com/nmeum/android-tools/pull/172 # e2fsdroid doesn't build on ppc64le
Patch1: 0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch # See https://github.com/tytso/e2fsprogs/issues/127
# https://github.com/nmeum/android-tools/pull/190 Patch0: Disable-e2fsdroid-for-ppc64le.patch
Patch2: 0003-Make-legacy-USB-driver-default-on-Linux.patch
BuildRequires: brotli-devel BuildRequires: brotli-devel
BuildRequires: cmake BuildRequires: cmake
BuildRequires: fmt-devel
BuildRequires: gcc BuildRequires: gcc
BuildRequires: gcc-c++ BuildRequires: gcc-c++
BuildRequires: gtest-devel BuildRequires: gtest-devel
@ -47,8 +46,7 @@ Provides: mke2fs.android = %{epoch}:%{version}-%{release}
Provides: bundled(boringssl) Provides: bundled(boringssl)
# Bundled boringssl doesn't support the big endian architectures rhbz 1431379 # Bundled boringssl doesn't support the big endian architectures rhbz 1431379
# And dropped ppc64le support: https://github.com/google/boringssl/commit/7d2338d000eb1468a5bbf78e91854236e18fb9e4 ExcludeArch: ppc ppc64 s390x
ExcludeArch: ppc ppc64 s390x ppc64le
%description %description
@ -71,7 +69,11 @@ to read and write the flash partitions. It needs the same USB device
setup between the host and the target phone as adb. setup between the host and the target phone as adb.
%prep %prep
%autosetup -p1 %setup -q
%ifarch ppc64le
%patch0 -p1
%endif
cp -p %{SOURCE1} 51-android.rules
%build %build
export GO111MODULE=off export GO111MODULE=off
@ -80,8 +82,24 @@ export GO111MODULE=off
%install %install
%cmake_install %cmake_install
install -p -D -m 0644 %{SOURCE2} \
%{buildroot}%{_unitdir}/adb.service
install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb
%post
%systemd_post adb.service
%preun
%systemd_preun adb.service
%postun
%systemd_postun_with_restart adb.service
%files %files
%doc 51-android.rules
%{_unitdir}/adb.service
%attr(0755,root,root) %dir %{_sharedstatedir}/adb
%attr(0755,root,root) %dir %{_datadir}/android-tools
#ASL2.0 and BSD #ASL2.0 and BSD
%{_bindir}/adb %{_bindir}/adb
#ASL2.0 #ASL2.0
@ -91,18 +109,18 @@ export GO111MODULE=off
%{_bindir}/img2simg %{_bindir}/img2simg
%{_bindir}/fastboot %{_bindir}/fastboot
%{_bindir}/append2simg %{_bindir}/append2simg
%ifnarch ppc64le
%{_bindir}/e2fsdroid %{_bindir}/e2fsdroid
%endif
%{_bindir}/ext2simg %{_bindir}/ext2simg
%{_bindir}/lpadd %{_bindir}/lpadd
%{_bindir}/lpdump %{_bindir}/lpdump
%{_bindir}/lpflash %{_bindir}/lpflash
%{_bindir}/lpmake %{_bindir}/lpmake
%{_bindir}/lpunpack %{_bindir}/lpunpack
%{_bindir}/make_f2fs
%{_bindir}/mkbootimg %{_bindir}/mkbootimg
%{_bindir}/mkdtboimg %{_bindir}/mkdtboimg
%{_bindir}/repack_bootimg %{_bindir}/repack_bootimg
%{_bindir}/sload_f2fs
%{_bindir}/unpack_bootimg %{_bindir}/unpack_bootimg
%{_datadir}/android-tools/completions/adb %{_datadir}/android-tools/completions/adb
%{_datadir}/android-tools/completions/fastboot %{_datadir}/android-tools/completions/fastboot
@ -110,7 +128,6 @@ export GO111MODULE=off
%{_datadir}/android-tools/mkbootimg/mkbootimg.py %{_datadir}/android-tools/mkbootimg/mkbootimg.py
%{_datadir}/bash-completion/completions/adb %{_datadir}/bash-completion/completions/adb
%{_datadir}/bash-completion/completions/fastboot %{_datadir}/bash-completion/completions/fastboot
%{_mandir}/man1/adb.1.*
%changelog %changelog
%autochangelog %autochangelog

234
generate_build.rb Normal file
View file

@ -0,0 +1,234 @@
#!/usr/bin/ruby
# Android build system is complicated and does not allow to build
# separate parts easily.
# This script tries to mimic Android build rules.
def expand(dir, files)
files.map{|f| File.join(dir,f)}
end
# Compiles sources to *.o files.
# Returns array of output *.o filenames
def compile(sources, cflags)
outputs = []
for s in sources
ext = File.extname(s)
case ext
when '.c'
cc = 'cc'
lang_flags = '-std=gnu11 $CFLAGS $CPPFLAGS'
when '.cpp', '.cc'
cc = 'cxx'
lang_flags = '-std=gnu++17 $CXXFLAGS $CPPFLAGS'
else
raise "Unknown extension #{ext}"
end
output = s + '.o'
outputs << output
puts "build #{output}: #{cc} #{s}\n cflags = #{lang_flags} #{cflags}"
end
return outputs
end
# dir - directory where ninja file is located
# lib - static library path relative to dir
def subninja(dir, lib)
puts "subninja #{dir}build.ninja"
return lib.each{|l| dir + l}
end
# Links object files
def link(output, objects, ldflags)
puts "build #{output}: link #{objects.join(' ')}\n ldflags = #{ldflags} $LDFLAGS"
end
puts "# This set of commands generated by generate_build.rb script\n\n"
puts "CC = #{ENV['CC'] || 'clang'}"
puts "CXX = #{ENV['CXX'] || 'clang++'}\n\n"
puts "CFLAGS = #{ENV['CFLAGS']}"
puts "CXXFLAGS = #{ENV['CXXFLAGS']}"
puts "LDFLAGS = #{ENV['LDFLAGS']}"
puts "PKGVER = #{ENV['PKGVER']}\n\n"
puts """
rule cc
command = $CC $cflags -c $in -o $out
rule cxx
command = $CXX $cflags -c $in -o $out
rule link
command = $CXX $ldflags $LDFLAGS $in -o $out
"""
adbdfiles = %w(
adb.cpp
adb_io.cpp
adb_listeners.cpp
adb_trace.cpp
adb_utils.cpp
adb_unique_fd.cpp
sockets.cpp
transport.cpp
transport_local.cpp
transport_usb.cpp
fdevent.cpp
shell_service_protocol.cpp
)
libadbd = compile(expand('core/adb', adbdfiles), '-DADB_HOST=1 -Icore/diagnose_usb/include -Icore/include -Icore/base/include -Icore/adb -Icore/libcrypto_utils/include')
adbfiles = %w(
client/auth.cpp
client/console.cpp
socket_spec.cpp
client/bugreport.cpp
client/line_printer.cpp
client/commandline.cpp
client/adb_client.cpp
services.cpp
client/file_sync_client.cpp
sysdeps_unix.cpp
sysdeps/errno.cpp
sysdeps/posix/network.cpp
client/main.cpp
client/usb_dispatch.cpp
client/usb_linux.cpp
client/usb_libusb.cpp
client/transport_mdns.cpp
)
libadb = compile(expand('core/adb', adbfiles), '-D_GNU_SOURCE -DADB_HOST=1 -Icore/libcrypto_utils/include -Iboringssl/src/include -Icore/include -Icore/base/include -Icore/adb -Imdnsresponder/mDNSShared')
basefiles = %w(
file.cpp
threads.cpp
logging.cpp
parsenetaddress.cpp
stringprintf.cpp
strings.cpp
errors_unix.cpp
test_utils.cpp
)
libbase = compile(expand('core/base', basefiles), '-DADB_HOST=1 -Icore/base/include -Icore/include')
logfiles = %w(
log_event_write.c
fake_log_device.c
log_event_list.c
logger_write.c
config_write.c
config_read.c
logger_lock.c
local_logger.c
fake_writer.c
logger_name.c
stderr_write.c
logprint.c
)
liblog = compile(expand('core/liblog', logfiles), '-DLIBLOG_LOG_TAG=1006 -D_XOPEN_SOURCE=700 -DFAKE_LOG_DEVICE=1 -Icore/libsystem/include -Icore/liblog/include -Icore/include')
cutilsfiles = %w(
fs_config.cpp
canned_fs_config.cpp
android_get_control_file.cpp
socket_network_client_unix.cpp
socket_inaddr_any_server_unix.cpp
sockets.cpp
sockets_unix.cpp
socket_local_client_unix.cpp
socket_local_server_unix.cpp
)
libcutils = compile(expand('core/libcutils', cutilsfiles), '-D_GNU_SOURCE -Icore/libcutils/include -Icore/include -Icore/base/include')
diagnoseusbfiles = %w(
diagnose_usb.cpp
)
libdiagnoseusb = compile(expand('core/diagnose_usb', diagnoseusbfiles), '-Icore/diagnose_usb/include -Icore/include -Icore/base/include')
libcryptofiles = %w(
android_pubkey.c
)
libcrypto = compile(expand('core/libcrypto_utils', libcryptofiles), '-Icore/libcrypto_utils/include -Iboringssl/src/include')
utilfiles = %w(
FileMap.cpp
Unicode.cpp
SharedBuffer.cpp
String8.cpp
String16.cpp
)
libutil = compile(expand('core/libutils', utilfiles), '-Icore/include')
mdnsfiles = %w(
mDNSShared/dnssd_ipc.c
mDNSShared/dnssd_clientstub.c
)
mdns = compile(expand('mdnsresponder', mdnsfiles), '-D_GNU_SOURCE -DHAVE_IPV6 -DHAVE_LINUX -DNOT_HAVE_SA_LEN -DUSES_NETLINK -UMDNS_DEBUGMSGS -DMDNS_DEBUGMSGS=0 -Imdnsresponder/mDNSShared -Imdnsresponder/mDNSCore -Iinclude')
zipfiles = %w(
zip_archive_stream_entry.cc
zip_archive.cc
)
libzip = compile(expand('core/libziparchive', zipfiles), '-Icore/libziparchive/include -Icore/base/include -Icore/include')
boringcryptofiles = %w(
bn/cmp.c
bn/bn.c
bytestring/cbb.c
mem.c
buf/buf.c
bio/file.c
bn/convert.c
base64/base64.c
)
boringcrypto = compile(expand('boringssl/src/crypto', boringcryptofiles), '-Iboringssl/src/include -Iinclude')
link('adb', libbase + liblog + libcutils + libcrypto + libadbd + libadb + libdiagnoseusb + libutil + libzip + mdns + boringcrypto, '-lz -lcrypto -lpthread -lusb-1.0')
fastbootfiles = %w(
bootimg_utils.cpp
fs.cpp
socket.cpp
tcp.cpp
udp.cpp
usb_linux.cpp
util.cpp
main.cpp
engine.cpp
fastboot.cpp
fastboot_driver.cpp
)
libfastboot = compile(expand('core/fastboot', fastbootfiles), '-DFASTBOOT_VERSION="\"$PKGVER\"" -D_GNU_SOURCE -D_XOPEN_SOURCE=700 -DUSE_F2FS -Icore/base/include -Icore/include -Icore/adb -Icore/libsparse/include -Icore/mkbootimg/include/bootimg -Icore/libziparchive/include -Icore/diagnose_usb/include')
sparsefiles = %w(
backed_block.cpp
output_file.cpp
sparse.cpp
sparse_crc32.cpp
sparse_err.cpp
sparse_read.cpp
)
libsparse = compile(expand('core/libsparse', sparsefiles), '-Icore/libsparse/include -Icore/base/include')
link('fastboot', libsparse + libzip + libcutils + liblog + libutil + libbase + libfastboot + libdiagnoseusb, '-lz -lpcre2-8 -lpthread -ldl')
simg2imgfiles = %w(
simg2img.cpp
)
libsimg2img = compile(expand('core/libsparse', simg2imgfiles), '-Iinclude -Icore/libsparse/include')
link('simg2img', libbase + libsparse + libsimg2img, '-lz')
img2simgfiles = %w(
img2simg.cpp
)
libimg2simg = compile(expand('core/libsparse', img2simgfiles), '-Iinclude -Icore/libsparse/include')
link('img2simg', libbase + libsparse + libimg2simg, '-lz')

View file

@ -1 +1 @@
SHA512 (android-tools-35.0.2.tar.xz) = 391ce4d638b274d7bbae24a3df8de8b5812a982570f29b2aef37d12a3ba7ed6f66b5c0b7f908759e0b0da30d152b5319af0fef16c54bdc3b9f4074fb22f80d10 SHA512 (android-tools-33.0.3p1.tar.xz) = 22ed3d9a71a962764998c8c4759215d24a1af121d43942c77c00878d636aea16a6b940811624bb1ae56ac416922d7262d5ced5436e646fe2dae0944b593ad4fe