Comments (9)
Notes to self:
art::HGraphBuilder
art::HInstructionBuilder
from meta.
- Compilation of
dex2artist
suceeds dex2artist
starts with adapted commandline flags and proper arm64 compilation- App starts and injects a few tracelogs, but crashes (controlled), because of an pending exception:
compiler/driver/compiler_driver.cc:663
if (self->IsExceptionPending()) {
ScopedObjectAccess soa(self);
LOG(FATAL) << "Unexpected exception compiling: " << dex_file.PrettyMethod(method_idx) << "\n"
<< self->GetException()->Dump();
}
de.heise.android.heiseonlineapp
14:57|weisgerber@dronebook ~/workspace/artist/ArtistGui $ ndk-stack -sym debug/android-26.full/ -dump checkme_06.log
********** Crash dump: **********
Build fingerprint: 'google/sailfish/sailfish:8.0.0/OPR3.170623.007/4286350:user/release-keys'
pid: 10725, tid: 10730, name: Compiler driver >>> /data/user/0/saarland.cispa.artist.artistgui/files/artist/dex2oat <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc 0004aa9c /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine tgkill at /proc/self/cwd/bionic/libc/arch-arm/syscalls/tgkill.S:10
Stack frame #01 pc 0001a3c3 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine abort at bionic/libc/bionic/abort.cpp:49
Stack frame #02 pc 00339397 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Abort(char const*) at art/runtime/runtime.cc:522
Stack frame #03 pc 0033998f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Aborter(char const*) at art/runtime/runtime.cc:2332
Stack frame #04 pc 003f11e1 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine std::__1::function<void (char const*)>::operator()(char const*) const at external/libcxx/include/functional:1915 (discriminator 1)
Stack frame #05 pc 000e2d1f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileMethod(art::Thread*, art::CompilerDriver*, art::DexFile::CodeItem const*, unsigned int, art::InvokeType, unsigned short, unsigned int, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::optimizer::DexToDexCompilationLevel, bool, art::Handle<art::mirror::DexCache>) at art/compiler/driver/compiler_driver.cc:663 (discriminator 12)
Stack frame #06 pc 000ecee9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileClassVisitor::Visit(unsigned int) at art/compiler/driver/compiler_driver.cc:2630 (discriminator 1)
Stack frame #07 pc 000e9887 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::ParallelCompilationManager::ForAllClosure::Run(art::Thread*) at art/compiler/driver/compiler_driver.cc:1613
Stack frame #08 pc 0036c051 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::ThreadPoolWorker::Run() at art/runtime/thread_pool.cc:83
Stack frame #09 pc 0036bc71 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::ThreadPoolWorker::Callback(void*) at art/runtime/thread_pool.cc:99
Stack frame #10 pc 00047dbf /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine __pthread_start(void*) at bionic/libc/bionic/pthread_create.cpp:215
Stack frame #11 pc 0001af7f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine __start_thread at bionic/libc/bionic/clone.cpp:46
14:57|weisgerber@dronebook ~/workspace/artist/ArtistGui $
de.wetteronline.wetterapp
14:30|weisgerber@dronebook ~/workspace/artist/ArtistGui $ ndk-stack -sym debug/android-26/ -dump checkme_05.log
********** Crash dump: **********
Build fingerprint: 'google/sailfish/sailfish:8.0.0/OPR3.170623.007/4286350:user/release-keys'
pid: 10239, tid: 10239, name: dex2artist >>> /data/user/0/saarland.cispa.artist.artistgui/files/artist/dex2oat <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc 0004aa9c /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine tgkill at /proc/self/cwd/bionic/libc/arch-arm/syscalls/tgkill.S:10
Stack frame #01 pc 0001a3c3 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine abort at bionic/libc/bionic/abort.cpp:49
Stack frame #02 pc 00339397 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Abort(char const*) at art/runtime/runtime.cc:522
Stack frame #03 pc 0033998f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Aborter(char const*) at art/runtime/runtime.cc:2332
Stack frame #04 pc 003f11e1 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine std::__1::function<void (char const*)>::operator()(char const*) const at external/libcxx/include/functional:1915 (discriminator 1)
Stack frame #05 pc 000e2d1f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileMethod(art::Thread*, art::CompilerDriver*, art::DexFile::CodeItem const*, unsigned int, art::InvokeType, unsigned short, unsigned int, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::optimizer::DexToDexCompilationLevel, bool, art::Handle<art::mirror::DexCache>) at art/compiler/driver/compiler_driver.cc:663 (discriminator 12)
Stack frame #06 pc 000ecfd9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileClassVisitor::Visit(unsigned int) at art/compiler/driver/compiler_driver.cc:2655 (discriminator 1)
Stack frame #07 pc 000e9887 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::ParallelCompilationManager::ForAllClosure::Run(art::Thread*) at art/compiler/driver/compiler_driver.cc:1613
Stack frame #08 pc 0036c8e5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::ThreadPool::Wait(art::Thread*, bool, bool) at art/runtime/thread_pool.cc:227
Stack frame #09 pc 000e53b5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::ParallelCompilationManager::ForAll(unsigned int, unsigned int, art::CompilationVisitor*, unsigned int) at art/compiler/driver/compiler_driver.cc:1589
Stack frame #10 pc 000e0ba9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileDexFile(_jobject*, art::DexFile const&, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::ThreadPool*, unsigned int, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:2685 (discriminator 1)
Stack frame #11 pc 000df2dd /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileAll(_jobject*, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:424
Stack frame #12 pc 000e1655 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileAll(_jobject*, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::VdexFile*, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:450
Stack frame #13 pc 00018155 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine art::Dex2Oat::Compile() at art/dex2oat/dex2oat.cc:1801 (discriminator 2)
Stack frame #14 pc 00008dbb /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine art::CompileApp(art::Dex2Oat&) at art/dex2oat/dex2oat.cc:2920
Stack frame #15 pc 00017d45 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine __libc_init at bionic/libc/bionic/libc_init_dynamic.cpp:114
Stack frame #16 pc 000081e4 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine _start at libgcc2.c:?
14:30|weisgerber@dronebook ~/workspace/artist/ArtistGui $ ndk-stack -sym /home/weisgerber/mount/colossus04/weisgerber/aosp/aosp_8.0.0_r9_arm-eng/out/target/product/generic_arm64/obj/lib/ -dump checkme_05.log
********** Crash dump: **********
Build fingerprint: 'google/sailfish/sailfish:8.0.0/OPR3.170623.007/4286350:user/release-keys'
pid: 10239, tid: 10239, name: dex2artist >>> /data/user/0/saarland.cispa.artist.artistgui/files/artist/dex2oat <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc 0004aa9c /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine __strtodg at sfp-exceptions.c:?
Stack frame #01 pc 0001a3c3 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine ??
??:0
Stack frame #02 pc 00339397 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::JNI::SetDoubleField(_JNIEnv*, _jobject*, _jfieldID*, double) at unwind-dw2-fde-dip.c:?
Stack frame #03 pc 0033998f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::JNI::GetStaticMethodID(_JNIEnv*, _jclass*, char const*, char const*) at unwind-dw2-fde-dip.c:?
Stack frame #04 pc 003f11e1 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine std::__1::__function::__func<art::CmdlineParser<art::RuntimeArgumentMap, art::RuntimeArgumentMap::Key>::ArgumentBuilder<art::JDWP::JdwpOptions>::ArgumentBuilder(art::CmdlineParser<art::RuntimeArgumentMap, art::RuntimeArgumentMap::Key>::Builder&, std::__1::shared_ptr<art::CmdlineParser<art::RuntimeArgumentMap, art::RuntimeArgumentMap::Key>::SaveDestination>)::{lambda()#1}, std::__1::allocator<{lambda()#1}>, art::JDWP::JdwpOptions& ()>::__clone() const at unwind-dw2-fde-dip.c:?
Stack frame #05 pc 000e2d1f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #06 pc 000ecfd9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #07 pc 000e9887 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #08 pc 0036c8e5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::MemMap::AlignBy(unsigned long) at ??:?
Stack frame #09 pc 000e53b5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #10 pc 000e0ba9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #11 pc 000df2dd /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #12 pc 000e1655 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine ??
??:0
Stack frame #13 pc 00018155 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat
Stack frame #14 pc 00008dbb /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat
Stack frame #15 pc 00017d45 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine ??
??:0
Stack frame #16 pc 000081e4 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat
14:45|weisgerber@dronebook ~/workspace/artist/ArtistGui $ ndk-stack -sym debug/android-26.full/ -dump checkme_05.log
********** Crash dump: **********
Build fingerprint: 'google/sailfish/sailfish:8.0.0/OPR3.170623.007/4286350:user/release-keys'
pid: 10239, tid: 10239, name: dex2artist >>> /data/user/0/saarland.cispa.artist.artistgui/files/artist/dex2oat <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Stack frame #00 pc 0004aa9c /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine tgkill at /proc/self/cwd/bionic/libc/arch-arm/syscalls/tgkill.S:10
Stack frame #01 pc 0001a3c3 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine abort at bionic/libc/bionic/abort.cpp:49
Stack frame #02 pc 00339397 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Abort(char const*) at art/runtime/runtime.cc:522
Stack frame #03 pc 0033998f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::Runtime::Aborter(char const*) at art/runtime/runtime.cc:2332
Stack frame #04 pc 003f11e1 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine std::__1::function<void (char const*)>::operator()(char const*) const at external/libcxx/include/functional:1915 (discriminator 1)
Stack frame #05 pc 000e2d1f /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileMethod(art::Thread*, art::CompilerDriver*, art::DexFile::CodeItem const*, unsigned int, art::InvokeType, unsigned short, unsigned int, art::Handle<art::mirror::ClassLoader>, art::DexFile const&, art::optimizer::DexToDexCompilationLevel, bool, art::Handle<art::mirror::DexCache>) at art/compiler/driver/compiler_driver.cc:663 (discriminator 12)
Stack frame #06 pc 000ecfd9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompileClassVisitor::Visit(unsigned int) at art/compiler/driver/compiler_driver.cc:2655 (discriminator 1)
Stack frame #07 pc 000e9887 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::ParallelCompilationManager::ForAllClosure::Run(art::Thread*) at art/compiler/driver/compiler_driver.cc:1613
Stack frame #08 pc 0036c8e5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart.so: Routine art::ThreadPool::Wait(art::Thread*, bool, bool) at art/runtime/thread_pool.cc:227
Stack frame #09 pc 000e53b5 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::ParallelCompilationManager::ForAll(unsigned int, unsigned int, art::CompilationVisitor*, unsigned int) at art/compiler/driver/compiler_driver.cc:1589
Stack frame #10 pc 000e0ba9 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileDexFile(_jobject*, art::DexFile const&, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::ThreadPool*, unsigned int, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:2685 (discriminator 1)
Stack frame #11 pc 000df2dd /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileAll(_jobject*, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:424
Stack frame #12 pc 000e1655 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libart-compiler.so: Routine art::CompilerDriver::CompileAll(_jobject*, std::__1::vector<art::DexFile const*, std::__1::allocator<art::DexFile const*> > const&, art::VdexFile*, art::TimingLogger*) at art/compiler/driver/compiler_driver.cc:450
Stack frame #13 pc 00018155 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine art::Dex2Oat::Compile() at art/dex2oat/dex2oat.cc:1801 (discriminator 2)
Stack frame #14 pc 00008dbb /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine art::CompileApp(art::Dex2Oat&) at art/dex2oat/dex2oat.cc:2920
Stack frame #15 pc 00017d45 /data/data/saarland.cispa.artist.artistgui/files/artist/lib/libc.so: Routine __libc_init at bionic/libc/bionic/libc_init_dynamic.cpp:114
Stack frame #16 pc 000081e4 /data/data/saarland.cispa.artist.artistgui/files/artist/dex2oat: Routine _start at libgcc2.c:?
from meta.
Injected app run
10-10 15:37:28.165 17944 17944 E zygote64: expected 1 dex files but found 2
10-10 15:37:28.066 1081 1784 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=de.heise.android.heiseonlineapp/.ui.ChannelActivity bnds=[255,245][512,440]} from uid 10035
10-10 15:37:28.069 803 4088 I ACDB-LOADER: ACDB AFE returned = -19
10-10 15:37:28.069 803 4088 D hardware_info: hw_info_append_hw_type : device_name = speaker
10-10 15:37:28.069 803 4088 D audio_hw_primary: enable_snd_device: snd_device(2: speaker)
10-10 15:37:28.069 803 4088 D audio_hw_primary: enable_audio_route: usecase(1) apply and update mixer path: low-latency-playback speaker
10-10 15:37:28.069 872 997 E ANDR-PERF-OPTSHANDLER: Warning: Resource [2, 0] not supported for core 1. Instead use resource for core 0
10-10 15:37:28.069 872 997 E ANDR-PERF-RESOURCEQS: Failed to apply optimization [2, 2, 0]
10-10 15:37:28.101 1081 2426 I ActivityManager: Start proc 17944:de.heise.android.heiseonlineapp/u0a150 for activity de.heise.android.heiseonlineapp/.ui.ChannelActivity
10-10 15:37:28.165 17944 17944 E zygote64: expected 1 dex files but found 2
Error Research
bool OatFileAssistant::DexChecksumUpToDate(const OatFile& file, std::string* error_msg) {
(...)
// art::OatFile
uint32_t number_of_dex_files = file.GetOatHeader().GetDexFileCount();
if (required_dex_checksums->size() != number_of_dex_files) {
(...)
}
bool OatFileAssistant::DexChecksumUpToDate(const VdexFile& file, std::string* error_msg) {
(...)
// art::VdexFile
uint32_t number_of_dex_files = file.GetHeader().GetNumberOfDexFiles();
if (required_dex_checksums->size() != number_of_dex_files) {
(...)
}
from meta.
ARTist now works on Android 8.0 Oreo!
Fixed stuff:
- art: branch
artist_oreo_master
https://github.com/Project-ARTist/art/tree/ - artist: branch
feature_oreo_support
Project-ARTist/ARTist@53d677d - ArtistGui: branch
master
Project-ARTist/ArtistGui@e918e67- Enable
saarland.cispa.artist.artistgui.compilation.ArtistImpl#PIXEL_PHONE_ANDROID_8
- => Proper probing follows
- Enable
Follow up work:
- Add Feature "Untrouched base.apk" for Android 8.0 Oreo. See: #7
from meta.
hi, can artistgui and artist be tested on sdk27 (8.1) already - i found no releases anywhere?
from meta.
Hi, the problem is that while we had a working version of ARTist for Oreo, it it is outdated by now and therefore lacks a lot of functionality that we currently only have for 7 & 7.1, such as the clean module structure and SDK.
Progress is tracked in Project-ARTist/art#18, but I am not aware of anyone currently working on this since we lack the man power =/
You can either try to use an older version of the whole art + ARTist + ArtistGui ensemble that supports Oreo or try to port it over. Let me know if the latter is something you would consider.
May I ask for your ARTist use case? Maybe I can help there...
from meta.
i just wanted to give it a test dumping the network traffic from pogo, actually trying to get raid data from pokemongo to create raid maps from it ;)
should the 8.0 branch work on 8.1 ?
from meta.
Not sure if we tested that, maybe @sweisgerber-dev has some insights here?
Btw if this is just for testing, an emulator with Android 7.1 could as well?
from meta.
@simonbuehler
I never tested it on 8.1 yet, but the possibility is pretty large that it works.
Be sure to enable the setting:
Replace base.apk
in ARTistGui's settings dialog if you try to test it on 8.1, because w/o it it definitely won't work.
from meta.
Related Issues (20)
- Proper READMEs HOT 2
- Website: Documentation 2.0 HOT 1
- Remove ARTist as art's submodule and place ARTist in local_manifest HOT 2
- Branching & Release Scheme HOT 4
- X86_64 emulator support: ARTist / ARTistGui cannot instrument apps on the Nougat 7.1.1 x86_64 emulator images
- Distinguish between usage during AOSP build, as system compiler or as an app asset
- `boot.oat` compilation support (AOSP build time)
- Update READMEs
- Module: Frida
- Module: Method Tracing (traceArtist) Improvements
- Auto deploy module into ArtistGui (from IDE) while developing modules
- Module configuration HOT 2
- Arena allocation crashes
- Module SDK and dynamic loading HOT 2
- API for controlling modules from outside the compiler HOT 1
- Versioning HOT 7
- Android 8.0 Oreo: Untouched base.apk HOT 1
- Website: Better CodeLib explanation HOT 1
- Module: method "filter engine"
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from meta.