Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add aapt2. I need your help. #63

Open
jershell opened this issue May 27, 2022 · 1 comment
Open

Add aapt2. I need your help. #63

jershell opened this issue May 27, 2022 · 1 comment

Comments

@jershell
Copy link
Contributor

jershell commented May 27, 2022

Hello. I am working on adding aapt2.
Now I have a successful build but I have an error while executing aapt2

./vendor/aapt2 version
Segmentation error (the memory stack is flushed to disk)

Next I used gdb --args ./vendor/aapt2 version

Program received signal SIGSEGV, Segmentation fault.
0x0000555555b4e12e in android::operator==<char> (lhs=<error reading variable: Cannot access memory at address 0x7fffff7feff8>, rhs=<error reading variable: Cannot access memory at address 0x7fffff7feff0>) at /home/5b/android-tools-31.0.3p1/vendor/base/libs/androidfw/include/androidfw/StringPiece.h:290
290	inline bool operator==(const ::std::basic_string<TChar>& lhs, const BasicStringPiece<TChar>& rhs) {

In build log I see this

In file included from /home/5b/android-tools-31.0.3p1/vendor/base/tools/aapt2/cmd/Command.h:26,
                 from /home/5b/android-tools-31.0.3p1/vendor/base/tools/aapt2/cmd/Command.cpp:17:
/home/5b/android-tools-31.0.3p1/vendor/base/libs/androidfw/include/androidfw/StringPiece.h: In instantiation of ‘bool android::operator==(const std::__cxx11::basic_string<_CharT>&, const android::BasicStringPiece<TChar>&) [with TChar = char]’:
/home/5b/android-tools-31.0.3p1/vendor/base/tools/aapt2/cmd/Command.cpp:191:34:   required from here
/home/5b/android-tools-31.0.3p1/vendor/base/libs/androidfw/include/androidfw/StringPiece.h:291:14: warning: in C++20 this comparison calls the current function recursively with reversed arguments
  291 |   return rhs == lhs;
      |          ~~~~^~~~~~

Mb you have secret knowledge, how can I fix this? =)

my aapt2 cmake file
#
# based on © 2022 Github Lzhiyong

protobuf_generate_cpp(AAPT2_CONFIGURATION_PROTO_SRCS AAPT2_CONFIGURATION_PROTO_HDRS base/tools/aapt2/Configuration.proto)
protobuf_generate_cpp(AAPT2_RESINT_PROTO_SRCS AAPT2_RESINT_PROTO_HDRS base/tools/aapt2/ResourcesInternal.proto)
protobuf_generate_cpp(AAPT2_RES_PROTO_SRCS AAPT2_RES_PROTO_HDRS base/tools/aapt2/Resources.proto)

# libincfs-utils
add_library(libincfs-utils STATIC
  incremental_delivery/incfs/util/map_ptr.cpp
)

target_include_directories(libincfs-utils PUBLIC
  core/include
  libbase/include
  incremental_delivery/incfs/include
  incremental_delivery/incfs/util/include
)

# libincfs
add_library(libincfs STATIC
  incremental_delivery/incfs/incfs_ndk.c
  incremental_delivery/incfs/incfs.cpp
  incremental_delivery/incfs/MountRegistry.cpp
  incremental_delivery/incfs/path.cpp
  incremental_delivery/sysprop/IncrementalProperties.sysprop.cpp
  )

target_include_directories(libincfs PUBLIC
  incremental_delivery/incfs/include
  incremental_delivery/incfs/util/include
  incremental_delivery/sysprop/include
  incremental_delivery/incfs/kernel-headers
  libbase/include
  libutils/include
  boringssl/include
  selinux/libselinux/include
  logging/liblog/include
)

# libbuildversion
add_library(libbuildversion STATIC
  libbuildversion/libbuildversion.cpp
  )

target_include_directories(libbuildversion PRIVATE
  libbuildversion/include
  )



set(INCLUDES
  base/tools/aapt2
  protobuf/src
  logging/liblog/include
  expat/lib
  fmtlib/include
  libpng
  libbase/include
  base/libs/androidfw/include
  base/cmds/idmap2/libidmap2_policies/include
  core/libsystem/include
  core/libutils/include
  boringssl/third_party/googletest/include
  libziparchive/include 
  libbuildversion/include
  incremental_delivery/incfs/util/include 
  incremental_delivery/incfs/kernel-headers
  native/include
  /usr/include/android/nativehelper
  )

set(COMPILE_FLAGS
  -Wno-missing-field-initializers
  -fno-exceptions 
  -fno-rtti
  -fPIC
  -DNDEBUG
  )

set(TOOL_SOURCE
  base/tools/aapt2/cmd/Command.cpp
  base/tools/aapt2/cmd/Compile.cpp
  base/tools/aapt2/cmd/Convert.cpp
  base/tools/aapt2/cmd/Diff.cpp
  base/tools/aapt2/cmd/Dump.cpp
  base/tools/aapt2/cmd/Link.cpp
  base/tools/aapt2/cmd/Optimize.cpp
  base/tools/aapt2/cmd/Util.cpp
  )
  
# build the host static library: aapt2
add_library(libaapt2 STATIC
  base/tools/aapt2/compile/IdAssigner.cpp
  base/tools/aapt2/compile/InlineXmlFormatParser.cpp
  base/tools/aapt2/compile/NinePatch.cpp
  base/tools/aapt2/compile/Png.cpp
  base/tools/aapt2/compile/PngChunkFilter.cpp
  base/tools/aapt2/compile/PngCrunch.cpp
  base/tools/aapt2/compile/PseudolocaleGenerator.cpp
  base/tools/aapt2/compile/Pseudolocalizer.cpp
  base/tools/aapt2/compile/XmlIdCollector.cpp
  base/tools/aapt2/configuration/ConfigurationParser.cpp
  base/tools/aapt2/dump/DumpManifest.cpp
  base/tools/aapt2/filter/AbiFilter.cpp
  base/tools/aapt2/filter/ConfigFilter.cpp
  base/tools/aapt2/format/Archive.cpp
  base/tools/aapt2/format/Container.cpp
  base/tools/aapt2/format/binary/BinaryResourceParser.cpp
  base/tools/aapt2/format/binary/ResChunkPullParser.cpp
  base/tools/aapt2/format/binary/TableFlattener.cpp
  base/tools/aapt2/format/binary/XmlFlattener.cpp
  base/tools/aapt2/format/proto/ProtoDeserialize.cpp
  base/tools/aapt2/format/proto/ProtoSerialize.cpp
  base/tools/aapt2/io/BigBufferStream.cpp
  base/tools/aapt2/io/File.cpp
  base/tools/aapt2/io/FileStream.cpp
  base/tools/aapt2/io/FileSystem.cpp
  base/tools/aapt2/io/StringStream.cpp
  base/tools/aapt2/io/Util.cpp
  base/tools/aapt2/io/ZipArchive.cpp
  base/tools/aapt2/link/AutoVersioner.cpp
  base/tools/aapt2/link/ManifestFixer.cpp
  base/tools/aapt2/link/NoDefaultResourceRemover.cpp
  base/tools/aapt2/link/ProductFilter.cpp
  base/tools/aapt2/link/PrivateAttributeMover.cpp
  base/tools/aapt2/link/ReferenceLinker.cpp
  base/tools/aapt2/link/ResourceExcluder.cpp
  base/tools/aapt2/link/TableMerger.cpp
  base/tools/aapt2/link/XmlCompatVersioner.cpp
  base/tools/aapt2/link/XmlNamespaceRemover.cpp
  base/tools/aapt2/link/XmlReferenceLinker.cpp
  base/tools/aapt2/optimize/MultiApkGenerator.cpp
  base/tools/aapt2/optimize/ResourceDeduper.cpp
  base/tools/aapt2/optimize/ResourceFilter.cpp
  base/tools/aapt2/optimize/ResourcePathShortener.cpp
  base/tools/aapt2/optimize/VersionCollapser.cpp
  base/tools/aapt2/process/SymbolTable.cpp
  base/tools/aapt2/split/TableSplitter.cpp
  base/tools/aapt2/text/Printer.cpp
  base/tools/aapt2/text/Unicode.cpp
  base/tools/aapt2/text/Utf8Iterator.cpp
  base/tools/aapt2/util/BigBuffer.cpp
  base/tools/aapt2/util/Files.cpp
  base/tools/aapt2/util/Util.cpp
  base/tools/aapt2/Debug.cpp
  base/tools/aapt2/DominatorTree.cpp
  base/tools/aapt2/java/AnnotationProcessor.cpp
  base/tools/aapt2/java/ClassDefinition.cpp
  base/tools/aapt2/java/JavaClassGenerator.cpp
  base/tools/aapt2/java/ManifestClassGenerator.cpp
  base/tools/aapt2/java/ProguardRules.cpp
  base/tools/aapt2/LoadedApk.cpp
  base/tools/aapt2/Resource.cpp
  base/tools/aapt2/ResourceParser.cpp
  base/tools/aapt2/ResourceTable.cpp
  base/tools/aapt2/ResourceUtils.cpp
  base/tools/aapt2/ResourceValues.cpp
  base/tools/aapt2/SdkConstants.cpp
  base/tools/aapt2/StringPool.cpp
  base/tools/aapt2/trace/TraceBuffer.cpp
  base/tools/aapt2/xml/XmlActionExecutor.cpp
  base/tools/aapt2/xml/XmlDom.cpp
  base/tools/aapt2/xml/XmlPullParser.cpp
  base/tools/aapt2/xml/XmlUtil.cpp
  base/tools/aapt2/Configuration.proto
  base/tools/aapt2/Resources.proto
  base/tools/aapt2/ResourcesInternal.proto
  ${AAPT2_CONFIGURATION_PROTO_SRCS} ${AAPT2_CONFIGURATION_PROTO_HDRS}
  ${AAPT2_RESINT_PROTO_SRCS} ${AAPT2_RESINT_PROTO_HDRS}
  ${AAPT2_RES_PROTO_SRCS} ${AAPT2_RES_PROTO_HDRS}
)
target_include_directories(libaapt2 PRIVATE ${INCLUDES})
target_compile_options(libaapt2 PRIVATE ${COMPILE_FLAGS})

# build the host shared library: aapt2_jni
add_library(libaapt2_jni SHARED
  base/tools/aapt2/jni/aapt2_jni.cpp
  ${TOOL_SOURCE}
  )
target_include_directories(libaapt2_jni PRIVATE ${INCLUDES})
target_compile_options(libaapt2_jni PRIVATE ${COMPILE_FLAGS})
target_link_libraries(libaapt2_jni libaapt2)

# build the executable file aapt2
add_executable(aapt2
  base/tools/aapt2/Main.cpp
  ${TOOL_SOURCE}
  )
target_include_directories(aapt2 PRIVATE ${INCLUDES})
target_compile_options(aapt2 PRIVATE ${COMPILE_FLAGS})
set_property(TARGET aapt2 PROPERTY CXX_STANDARD 17)
set_property(TARGET libaapt2_jni PROPERTY CXX_STANDARD 17)

target_link_libraries(aapt2
  libaapt2
  libincfs
  libandroidfw
  libutil
  liblog
  libincfs-utils
  libcutils
  libzip
  libbase
  libbuildversion
  png
  expat
  z
  protobuf
  )

@jershell
Copy link
Contributor Author

update
I think it related with gcc bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94141#c1
I used clang 14.0 for fix it. Now we have success executable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant