Git Product home page Git Product logo

multilanguages's Issues

新工程嵌入的时候,报Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

Process: com.example.multilanguage2, PID: 22233
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.multilanguage2/com.example.multilanguage2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
at android.os.Handler.dispatchMessage(Handler.java:112)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference
at android.content.ContextWrapper.getApplicationInfo(ContextWrapper.java:159)
at android.app.FragmentManagerImpl.getTargetSdk(FragmentManager.java:2978)
at android.app.FragmentManagerImpl.attachController(FragmentManager.java:2967)
at android.app.FragmentController.attachHost(FragmentController.java:86)
at android.app.Activity.attach(Activity.java:7366)

打包编译报错

/app/build/intermediates/transforms/MultiLanguages/debug/47. jar as removed. Output mapping should
应该是插件混淆问题

theme里面设置的windowBackground图片资源适配不了多语言环境

我在AndroidManifest.xml文件中配置SplashActivity的theme:

AndroidManifest.xml

<activity
            android:name="com.youngwu.test.SplashActivity"
            android:resizeableActivity="true"
            android:screenOrientation="portrait"
            android:theme="@style/splashTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

styles.xml

<style name="splashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/welcome_layer</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>

/drawable/welcome_layer.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <bitmap android:src="@drawable/common_app_welcome_background" />
    </item>

    <item android:bottom="75dp">
        <bitmap
            android:gravity="bottom"
            android:src="@drawable/common_startup_logo" />
    </item>

    <item
        android:bottom="66dp"
        android:gravity="center">
        <bitmap
            android:gravity="center"
            android:src="@drawable/common_startup_slogan" />
    </item>
</layer-list>

分别在drawable-xxhdpi文件夹下面放置了:common_app_welcome_background.webp,common_startup_logo.webp,common_startup_slogan.webp。

然后在drawable-zh-rCN-xxhdpi和drawable-zh-rTW-xxhdpi文件夹下面各放置了:common_startup_slogan.webp。

目的是想在英文、简体、繁体下面各自显示不一样的slogan,但是发现如果在Application的onCreate()方法里面执行时间较长,比如debug包可能2.5s,就会出现theme先走系统的Locale然后Application的onCreate()方法执行完后,到了SplashActivity界面出现才显示了以APP内部设置的Locale方案的theme。也就是觉得APP内部配置的Locale方案仍然还没有做到快于系统决定首先显示APP theme的时机。

具体的Demo代码,我写在这里:https://github.com/yinyangwu/Internationalization.git

语言突然恢复成默认语言

老哥,我APP的默认语言是英文,手机的系统语言是简体中文。APP设置跟随系统后,APP显示简体中文--正常。但是偶尔用着用着会出现APP内的语言变成了英文,重启APP又恢复了简体中文。这种情况出现了大概3次

接入项目之后 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'

如题 接入依赖以后 我运行项目就会报错
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithInstantRunForDebug'
java.lang.RuntimeException: com.android.build.api.transform.TransformException: java.lang.IllegalStateException: java.lang.IllegalStateException
不知道有没有人遇到 我不知道怎么解决

升级androidx的v7包到1.1.0 会出现国际化错乱

androidx.appcompat:appcompat:1.1.0
设置下边夜间模式AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
这个包 1.0.2 没问题 1.1.0会错乱,情况就是代码设置的可以,xml里直接设置的无效

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); 白天模式下就是正常的

文档写的不太清楚

你好,我在项目中使用了这个开源库
但是,有个问题想问一下
plugin的作用是什么,第三方库语言变换么
我之前在使用的过程中就出现集成第三方SDK导致Service创建失败,找了好久才发现是插件的原因,看到#7 升级了插件才解决了问题
所以,希望可以将文档写的更详细些,把改变应用内语言和第三方库分离开,毕竟有些第三方库并不能了解的很清楚,提个小建议
非常感谢开源这个库,这个库是目前来说,比较新并且star也算比较高的,希望能维护的越来越好
如果需要帮助一起维护这个库的话,我也希望可以尽自己的一份力
加油⛽️

编译出现问题

Execution failed for task ':app:transformClassesWithMultiLanguagesForDebug'.

Application attachBaseContext崩溃

@OverRide
protected void attachBaseContext(Context base) {
MultiDex.install(this);
// 保存系统选择语言
LocalManagerUtil.INSTANCE.saveSystemCurrentLanguage();
super.attachBaseContext(LocalManageUtils.setLocal(base));
}

华为、小米手机语言切换语言后部分页面会自动变为跟随系统语言

华为荣耀9、小米手机语言切换语言后部分页面会自动变为简体中文 ,首页MainActivity的tab导航+3个Fragment,其中在切换到第三个fragment的时候,此页面自动换为显示简体,此fragmen中打印日志为选中的语言但切换显示始终为跟随系统语言,vivo xplay6手机切换一切正常,即时在basefragment中的重写onHiddenChanged 方法中再次设置LocalManageUtil.setApplicationLanguage(context) 也没用,请问如何解决?

编译Release包在混淆过程中产生了的太多的AGPBI提醒,直到GC overhead limit exceeded崩溃了,打包失败

Android target SDK 是Android13:

=============================================================================

#Android SDK依赖
TARGET_SDK_VERSION=33
MIN_SDK_VERSION=21
COMPILE_SDK_VERSION=33
KOTLIN_COROUTINES_VERSION=1.6.1

=============================================================================

gradle tools的版本:

=============================================================================

classpath 'com.android.tools.build:gradle:7.3.1'
classpath "com.github.jokar:multi-languages.plugin:0.1.5"

=============================================================================

gradle.properties文件中的部分内容:

=============================================================================

#gradle提速相关
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:MaxMetaspaceSize=2048m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.caching=true
#优化kotlin
kotlin.incremental=true
kotlin.incremental.java=true
kotlin.incremental.js=true
kotlin.caching.enabled=true
kotlin.code.style=official
#优化kapt
kapt.incremental.apt=true
kapt.include.compile.classpath=false
#android项目提速相关
android.databinding.incremental=true
android.injected.testOnly=false
android.useAndroidX=true
android.enableJetifier=true
android.enableBuildScriptClasspathCheck=false
android.suppressUnsupportedCompileSdk=33

=============================================================================

执行assembleOfficialRelease命令,编译过程中的部分日志:

=============================================================================

AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/853.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
AGPBI: {"kind":"warning","text":"Expected stack map table for method with non-linear control flow. In later version of R8, the method may be assumed not reachable.","sources":[{"file":"/Users/yinyangwu/AndroidStudioProjects/miya/app/build/intermediates/transforms/MultiLanguages/official/release/651.jar"}],"tool":"R8"}
File system event consumer thread stopped due to exception
java.lang.OutOfMemoryError: GC overhead limit exceeded
at java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:130)
at java.base/sun.nio.fs.UnixPath.(UnixPath.java:69)
at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:279)
at java.base/java.nio.file.Path.of(Path.java:147)
at java.base/java.nio.file.Paths.get(Paths.java:69)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry$1.handleChangeEvent(DefaultFileWatcherRegistry.java:89)
at net.rubygrapefruit.platform.internal.jni.AbstractFileEventFunctions$ChangeEvent.handleEvent(AbstractFileEventFunctions.java:266)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry.lambda$createAndStartEventConsumerThread$0(DefaultFileWatcherRegistry.java:84)
at org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry$$Lambda$153/0x0000000800355c40.run(Unknown Source)
at java.base/java.lang.Thread.run(Thread.java:829)
Exception in thread "Daemon client event forwarder" java.lang.OutOfMemoryError: GC overhead limit exceeded
Problem in daemon expiration check
java.lang.OutOfMemoryError: GC overhead limit exceeded

Task :app:minifyOfficialReleaseWithR8
AGPBI: {"kind":"error","text":"java.lang.OutOfMemoryError: GC overhead limit exceeded","sources":[{}],"tool":"R8"}
java.lang.OutOfMemoryError: GC overhead limit exceeded

Task :app:minifyOfficialReleaseWithR8 FAILED

=============================================================================

初步怀疑是multi-languages插件中当前的ASM写法存在大量的内存泄露问题,导致了内存OOM了,麻烦大佬抽时间能看看吗?

Service报错崩溃

继承 Service
错误信息:
2019-10-10 15:28:18.438 31956-31956/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: gqz.pager, PID: 31956
java.lang.NoSuchMethodError: No super method attachBaseContext(Landroid/content/Context;)V in class Landroid/content/ContextWrapper; or its super classes (declaration of 'android.content.ContextWrapper' appears in /system/framework/framework.jar)
at gqz.pager.service.MyService.attachBaseContext(Unknown Source:4)
at android.app.Service.attach(Service.java:761)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3337)
at android.app.ActivityThread.-wrap4(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1677)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

打开Service奔溃

报错
java.lang.VerifyError: Verifier rejected class com.github.jokar.multilanguages.MyServices due to bad method void com.github.jokar.multilanguages.MyServices.attachBaseContext(android.content.Context)

切换语言后textview问题

切换阿语后,动态设置的setText都没问题,但是在xml里面写的都不行,但是这个demo没问题,我的项目就是不行,都是一样的代码

Class versions V1_5 or less must use F_NEW frames

+-----------------------------------------------------------------------------+
|                     Multi Languages Plugin START                            |
+-----------------------------------------------------------------------------+
+------------------------isIncremental:false----------------------------------+
add attach method to com/tianxin/downloadcenter/backgroundprocess/RemoteBackgroundProcess
add attach method to com/tianxin/downloadcenter/backgroundprocess/processprotecter/ForegroundAssistService
add attach method to com/tcloud/core/connect/mars/service/MarsServiceNative
add attach method to com/tcloud/core/ui/baseview/SupportActivity
add applyOverrideConfiguration method to com/tcloud/core/ui/baseview/SupportActivity

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithMultiLanguagesForGoogleDebug'.
> Class versions V1_5 or less must use F_NEW frames.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 2m 1s
657 actionable tasks: 444 executed, 213 from cache

我使用的gradle版本如下:

classpath 'com.android.tools.build:gradle:4.0.2'

我使用的multi-languages版本如下:

classpath 'com.github.jokar:multi-languages.plugin:0.1.1'

混淆出错

AGPBI: {"kind":"error","text":"Illegal invoke-super to void android.app.IntentService.attachBaseContext(android.content.Context) from class com.google.firebase.components.ComponentDiscoveryService","sources":[{"file":"F:\\\app\build\intermediates\transforms\MultiLanguages\release\42.jar"}],"tool":"D8"}

Task :app:transformClassesAndResourcesWithR8ForRelease FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:transformClassesAndResourcesWithR8ForRelease'.

com.android.tools.r8.CompilationFailedException: Compilation failed to complete

请问这种是什么情况???

Android Studio 3.5
Gradle 3.4.2

第三方的SDK和控件没有更改

App的语言是更改成功了,但是第三方的SDK和控件的语言依然和系统一致,这是什么原因?按理说在Application的attachBaseContext(Context base)方法中设置的应该可以更改第三方的啊?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.