jaredrummler / androiddevicenames Goto Github PK
View Code? Open in Web Editor NEWA small Android library to get the market name of an Android device.
License: Apache License 2.0
A small Android library to get the market name of an Android device.
License: Apache License 2.0
My Android device is Samsung Galaxy J7 with MODEL = SM-J710FN. Its default device name is Galaxy J7 (2016). However, DeviceName.getDeviceName() API returns SM-J710F. Thanks!
LGE,G Pro2,b1w,LG-D838
It should be "G Pro2: for the marketing name, but I got "LGE LG-D838"
Hi, I read the source code and noticed that the device info is retrieved from the inner database of assets, who is taking care of the update of database and how often it does?
Another question, do this library have an mechanism to update the device list from network?
Please change to 'implementation'.
I download the support devices pdf at https://support.google.com/googleplay/answer/1727131?hl=en
my android phone model is Huawei p20 pro
I found it in this pdf ,
Huawei P20 Pro HWCLT CLT-AL00
in your datebase, i cant found this model, thxπ
Hello we found wrong name of device in your database. The device with model name MAR-LX1R should be HUAWEI P30 LITE not HONOR 20 LITE. Could you please fix it ?
https://www.gsmarena.com/huawei_p30_lite-9545.php
Thank you
Hi,
for my Huawei Mate 20 X model EVR-AL00 getDeviceName return HUAWEI Mate 20 X (5G) which is wrong.
I made code inspection with following results:
HUAWEI Mate 20 X (5G) HWEVR EVR-AN00
HUAWEI Mate 20 X (5G) HWEVR EVR-N29
Huawei Mate 20 X HWEVR EVR-L29
Huawei Mate 20 X HWEVR EVR-TL00
Huawei Mate 20 X (5G) HWEVR EVR-N29
Huwei Mate 20 X HWEVR EVR-AL00
if (codename != null && model != null) { selection = COLUMN_CODENAME + " LIKE ? OR " + COLUMN_MODEL + " LIKE ?"; selectionArgs = new String[] { codename, model };
if (cursor.moveToFirst()) { name = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_NAME)); }
HUAWEI Mate 20 X (5G)
HWEVR EVR-AN00
which is different from EVR-AL00Probably would be better first try select from database with "AND" operator and when nothing is returned, then try with OR operator.
Suggested change:
public DeviceInfo queryToDevice(@Nullable String codename, @Nullable String model, boolean exactly) {
if (!TextUtils.isEmpty(codename) && !TextUtils.isEmpty(model)) { if (exactly) { selection = COLUMN_CODENAME + " LIKE ? AND " + COLUMN_MODEL + " LIKE ?"; } else { selection = COLUMN_CODENAME + " LIKE ? OR " + COLUMN_MODEL + " LIKE ?"; }
DeviceInfo info = database.queryToDevice(codename, model, true); if (info == null) { info = database.queryToDevice(codename, model, false); }
Alexander
Hello,
It seems that when running the method DeviceName.getDeviceName()
for the first time. It runs everythink defined in DeviceName.getDeviceInfo(Context context, String codename, String model)
(copying database, querying database). This method is also annotated as @workerthread.
It would be nice to run it in initialization process on worker thread for example. What do you think?
Thanks a lot!
Hi device name for Samsung Note 3 is missing (Note 3 Model number is "SM-N900", Codename is "ha3g")
if (codename != null && codename.equals("ha3g") || model.equals("SM-N900")
|| model.equals("SM-N9005")
|| model.equals("SM-N9002")
|| model.equals("SM-N9005T")
|| model.equals("SM-N9005P")
|| model.equals("SM-N9005A")
|| model.equals("SM-N9007")
|| model.equals("SM-N900W8")
|| model.equals("SM-N9000Q")
|| model.equals("SM-N9000")
|| model.equals("SM-N900X")
|| model.equals("SM-N9000Q_MEA")
|| model.equals("SM-N900W8_LA")
|| model.equals("SM-N900_MEA")
|| model.equals("SM-N900_SEA")
|| model.equals("SM-N900_SWA")
|| model.contains("SM-N9008V")
|| model.contains("SM-N900K")
|| model.contains("SM-N900L")
|| model.contains("SM-N900S")) {
return "Galaxy Note 3";
}
Got device models from: https://forum.xda-developers.com/showthread.php?t=2471434
When running with strict mode enabled, this library throws this exception:
E/StrictMode: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
java.lang.Throwable: Explicit termination method 'close' not called
I am using the latest version of OkHttp 3.9.1
FAILURE: Build failed with an exception.
Where:
Script '/Users/natsiasrafi/Downloads/AndroidDeviceNames-master/scripts/publish-root.gradle' line: 11
What went wrong:
A problem occurred evaluating script.
Cannot get property 'ossrhUsername' on extra properties extension as it does not exist
Run with --info or --debug option to get more log output.
Run with --scan to get full insights.
Exception is:
org.gradle.api.GradleScriptException: A problem occurred evaluating script.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at org.gradle.configuration.DefaultScriptTarget.addConfiguration(DefaultScriptTarget.java:74)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:136)
at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyScript(DefaultObjectConfigurationAction.java:156)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$000(DefaultObjectConfigurationAction.java:43)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$1.run(DefaultObjectConfigurationAction.java:76)
at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:190)
at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.java:37)
at org.gradle.api.Script$apply.callCurrent(Unknown Source)
at build_75mydh35kinslkwazlhggn5xq.run(/Users/natsiasrafi/Downloads/AndroidDeviceNames-master/build.gradle:73)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:79)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:136)
at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:44)
at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:360)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:378)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:359)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:109)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:360)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$2(DefaultProjectStateRegistry.java:408)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:408)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:389)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:359)
at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:100)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:72)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:760)
at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:151)
at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.ensureConfigured(DefaultProjectStateRegistry.java:328)
at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:33)
at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:50)
at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:64)
at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
at org.gradle.initialization.VintageBuildModelController.lambda$prepareProjects$3(VintageBuildModelController.java:89)
at org.gradle.internal.model.StateTransitionController.lambda$doTransition$12(StateTransitionController.java:227)
at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:238)
at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:226)
at org.gradle.internal.model.StateTransitionController.lambda$transitionIfNotPreviously$10(StateTransitionController.java:201)
at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:34)
at org.gradle.internal.model.StateTransitionController.transitionIfNotPreviously(StateTransitionController.java:197)
at org.gradle.initialization.VintageBuildModelController.prepareProjects(VintageBuildModelController.java:89)
at org.gradle.initialization.VintageBuildModelController.getConfiguredModel(VintageBuildModelController.java:64)
at org.gradle.internal.build.DefaultBuildLifecycleController.lambda$withProjectsConfigured$1(DefaultBuildLifecycleController.java:121)
at org.gradle.internal.model.StateTransitionController.lambda$notInState$4(StateTransitionController.java:143)
at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
at org.gradle.internal.model.StateTransitionController.notInState(StateTransitionController.java:139)
at org.gradle.internal.build.DefaultBuildLifecycleController.withProjectsConfigured(DefaultBuildLifecycleController.java:121)
at org.gradle.internal.build.DefaultBuildToolingModelController.locateBuilderForTarget(DefaultBuildToolingModelController.java:57)
at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.lambda$locateBuilderForTarget$0(DefaultBuildTreeModelCreator.java:73)
at org.gradle.internal.build.DefaultBuildLifecycleController.withToolingModels(DefaultBuildLifecycleController.java:178)
at org.gradle.internal.build.AbstractBuildState.withToolingModels(AbstractBuildState.java:111)
at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.locateBuilderForTarget(DefaultBuildTreeModelCreator.java:73)
at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator$DefaultBuildTreeModelController.locateBuilderForDefaultTarget(DefaultBuildTreeModelCreator.java:68)
at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getTarget(DefaultBuildController.java:157)
at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getModel(DefaultBuildController.java:101)
at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter$2.getModel(InternalBuildActionAdapter.java:76)
at org.gradle.tooling.internal.consumer.connection.BuildControllerAdapter.getModel(BuildControllerAdapter.java:62)
at org.gradle.tooling.internal.consumer.connection.AbstractBuildController.getModel(AbstractBuildController.java:44)
at org.gradle.tooling.internal.consumer.connection.AbstractBuildController.getModel(AbstractBuildController.java:29)
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:110)
at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:56)
at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:79)
at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.runAction(AbstractClientProvidedBuildActionRunner.java:131)
at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionAdapter.beforeTasks(AbstractClientProvidedBuildActionRunner.java:99)
at org.gradle.internal.buildtree.DefaultBuildTreeModelCreator.beforeTasks(DefaultBuildTreeModelCreator.java:52)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$fromBuildModel$1(DefaultBuildTreeLifecycleController.java:75)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$runBuild$4(DefaultBuildTreeLifecycleController.java:106)
at org.gradle.internal.model.StateTransitionController.lambda$transition$6(StateTransitionController.java:166)
at org.gradle.internal.model.StateTransitionController.doTransition(StateTransitionController.java:238)
at org.gradle.internal.model.StateTransitionController.lambda$transition$7(StateTransitionController.java:166)
at org.gradle.internal.work.DefaultSynchronizer.withLock(DefaultSynchronizer.java:44)
at org.gradle.internal.model.StateTransitionController.transition(StateTransitionController.java:166)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.runBuild(DefaultBuildTreeLifecycleController.java:103)
at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.fromBuildModel(DefaultBuildTreeLifecycleController.java:74)
at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction(AbstractClientProvidedBuildActionRunner.java:43)
at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:53)
at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:49)
at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:119)
at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:128)
at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:65)
at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:65)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204)
at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53)
at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:73)
at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.lambda$execute$0(RunAsWorkerThreadBuildActionExecutor.java:36)
at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:270)
at org.gradle.internal.work.DefaultWorkerLeaseService.runAsWorkerThread(DefaultWorkerLeaseService.java:119)
at org.gradle.launcher.exec.RunAsWorkerThreadBuildActionExecutor.execute(RunAsWorkerThreadBuildActionExecutor.java:36)
at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:100)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter$ActionImpl.apply(BuildSessionLifecycleBuildActionExecuter.java:88)
at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:62)
at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:41)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
Caused by: groovy.lang.MissingPropertyException: Cannot get property 'ossrhUsername' on extra properties extension as it does not exist
at org.gradle.internal.extensibility.DefaultExtraPropertiesExtension.getProperty(DefaultExtraPropertiesExtension.java:68)
at publish_root_fogprtxulohe356rztqf2yms.run(/Users/natsiasrafi/Downloads/AndroidDeviceNames-master/scripts/publish-root.gradle:11)
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
... 189 more
Get more help at https://help.gradle.org
CONFIGURE FAILED in 4s
I'm getting all sorts of errors when I implement the library and try to compile, the gradle is failing to compile at all times.
Has anyone else faced this?
Hello,
I am using the library to retrieve the device market name, which works, but i always see this exception below for the missing manufacturer?
org.json.JSONException: No value for manufacturer
at org.json.JSONObject.get(JSONObject.java:389)
at org.json.JSONObject.getString(JSONObject.java:550)
at com.jaredrummler.android.device.DeviceName$DeviceInfo.(DeviceName.java:374)
at com.jaredrummler.android.device.DeviceName$DeviceInfo.(DeviceName.java:347)
at com.jaredrummler.android.device.DeviceName.getDeviceInfo(DeviceName.java:186)
at com.jaredrummler.android.device.DeviceName.getDeviceName(DeviceName.java:138)
at com.jaredrummler.android.device.DeviceName.getDeviceName(DeviceName.java:111)
at com.atos.ucc.g3pten.core.services.G3PTenService.setDeviceInformation(G3PTenService.kt:307)
at com.atos.ucc.g3pten.core.services.G3PTenService.setup(G3PTenService.kt:143)
at com.atos.ucc.g3pten.core.services.G3PTenService.onCreate(G3PTenService.kt:100)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3522)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1740)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6688)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
It is a very simple code:
I have initialized the lib:
DeviceName.init(this)
Then call:
private fun setupDeviceInformation() {
try {
g3ptDeviceModelInformation =
"${Build.MODEL} (${Build.MANUFACTURER}) (${DeviceName.getDeviceName()})"
G3PTenLog.d(TAG, "[SVC] DeviceName: $g3ptDeviceModelInformation")
} catch (e: Exception) {
G3PTenLog.e(TAG, "[SVC] Error retrieving device name: $e")
e.printStackTrace()
}
}
Some apps might not be comfortable sending a web request (especially using HttpUrlConnection) with device name for every user (minus the 600 most popular phones). There are security and performance reasons to want to turn this off.
How can we manually update the Database, android-devices.db & android-devices.zip files. I want to exclude the devices lower than android 6.0. So i can decrease the library size.
Hi - I am on a project at the moment that involves detecting a device - the Samsung Galaxy Tab A7 (SM-T500). I notice this device is in Google's list of supported devices, and also in the SQLite database that you currently have in your codebase, but is NOT in the codebase that is in the 2.1.0 release of the library.
Are you in a position to release a 2.2.0 version of the library that includes your current SQLite database?
Thanks.
Hi, thanks for the great library and info source.
Here the list of non matched device models. It may be useful for further improvements. https://pastebin.com/azDGyJpC
Hi,
we upgraded to 2.0.0. Following exception is thrown:
org.json.JSONException: No value for manufacturer
at org.json.JSONObject.get(JSONObject.java:399)
at org.json.JSONObject.getString(JSONObject.java:560)
at com.jaredrummler.android.device.DeviceName$DeviceInfo.<init>(DeviceName.java:374)
at com.jaredrummler.android.device.DeviceName$DeviceInfo.<init>(DeviceName.java:347)
at com.jaredrummler.android.device.DeviceName.getDeviceInfo(DeviceName.java:186)
at com.jaredrummler.android.device.DeviceName.getDeviceName(DeviceName.java:138)
I suggest to add a boolean method to get whether the selected device has a notch.
Here's an example of the issue:
{
"manufacturer": "Archos",
"market_name": "Bush 5 4G",
"codename": "ac55heplus",
"model": "\"Bush 5.5\"\" 4G\""
},
I believe the last line should be
"model": "Bush 5.5\" 4G"
Thanks so much for this service, I really appreciate it!
It seems that only the code that generates the .db
file fetches https://storage.googleapis.com/play_public/supported_devices.csv
Isn't the most recent file downloaded and parsed at runtime if the device name is not found in the cached DB?
The results (fallback) of unknown devices contain the manufacturer. The results of known devices mostly don't include the manufacturer.
Hello,
We use https://github.com/cookpad/license-tools-plugin
With 2.0.0 everything worked well, but when I update to 2.1.0 and I update the licenses.yml accordingly, I get this error:
Task :app:checkLicenses FAILED
Licenses not matched with pom.xml in dependencies:
- artifact: com.jaredrummler:android-device-names:+
license: Apache License
This is what gets added to licenses.yml, but then ends up throwing an error:
I think there's a problem in Maven Central's license declaration for 2.1.0.
I have copied and paste the class DeviceName and ran a test on my tablet : Samsung Galaxy Note 10.1 (2014 Edition) but I get "SM-P600". Is it normal ?
On emulator in version 1.1.9 i have device name - "AOSP On IA Emulator". After upgrading to 2.0.0 i now have "Emualtor". Probably a typo in device db?
In the database(s) the device name for listing num:8182 shows as "Emualtor" ... I noticed this in an Android Studio emulator while using this library.
BTW: I could have fixed this with a pull request, but there are 3 copies of the database here. Why maintain 3 copies?
This is pretty self explanatory and I'm more curious how it happens in the first place (typos, etc).
I'll give two [recent] examples:
1a) SM-T818V (Samsung Galaxy TabS2 9.7)
1b) SM-T818W (Samsung Galaxy Tab S2 9.7)
There's a space missing between Tab and S2 on the 818V.
2a) SM-P580X (Samsung Galaxy TabA Plus10.1)
2b) SM-P583 (Samsung Galaxy TabA Plus 10.1)
Again, a space is missing.
There are a number of other minor issues, like case sensitivity and such but I'm mostly just curious how it's happening in the first place. Hopefully this isn't coming across as disrespectful, I really appreciate the work done to maintain this library!
While testing with an emulator, it was trying to resolve "generic_x86_arm" and could not get JSON data from the server.
getDeviceInfo
String url = String.format(DEVICE_JSON_URL, codename.toLowerCase(Locale.ENGLISH));
String jsonString = downloadJson(url);
JSONArray jsonArray = new JSONArray(jsonString);
If downloadJson fails and returns an empty string, it will fail on JSONArray.
org.json.JSONException: End of input at character 0
Not a huge deal since it is caught but it looks bad to see in the debugger.
Because it seems that this repository has not had changes for 1 year and every day there are surely new devices that are not covered by the database of this library.
I have created a library that is able to retrieve the marketName of the device without having to update the database, directly from the Google's csv file, in case it is registered.
I'm not here to advertise, but maybe more than one person can help you.
Sorry for the disturb.
DB contains value Emualtor instead of Emulator
I'm having trouble fetching some market names of the phones where the model is returned
When I view the raw JSON it shows that the market_name exists but in code it comes off same as the model.
{
"manufacturer": "Xiaomi",
"market_name": "HM Note 2",
"codename": "hermes",
"model": "Redmi Note 2"
}
eg
DeviceName.with(this).request { info, error ->
val manufacturer = info.manufacturer
val name = info.marketName
val model = info.model
val codename = info.codename
val deviceName = info.name
Here, the name returns Redmi Note 2
(should return HM Note 2
) and model also returns Redmi Note 2
Hi,
Can there be a Flutter version of this library?
fyi
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W android.database.sqlite.SQLiteException: no such table: devices (code 1): , while compiling: SELECT name, codename, model FROM devices WHERE codename LIKE ? OR model LIKE ?
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:896)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:507)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
2023-04-01 02:49:26.461 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1346)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1193)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1064)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1232)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at com.jaredrummler.android.device.DeviceDatabase.queryToDevice(DeviceDatabase.java:116)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at com.jaredrummler.android.device.DeviceName.getDeviceInfo(DeviceName.java:193)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at com.jaredrummler.android.device.DeviceName$Request$GetDeviceRunnable.run(DeviceName.java:314)
2023-04-01 02:49:26.462 10515-10782 System.err com.fujitsu.smartair.agent W at java.lang.Thread.run(Thread.java:818)
The model for both the 2012 and 2013 Nexus are the same. Rely on Build.DEVICE and ignore BUILD.MODEL for Nexus 7 devices.
Hi guys,,
If you're looking for an API to get the official specs and features of any smartphone in the world, checkout TechSpecs API. It provides the easiest way to get the details of any device like Model Name, CPU, Camera, Battery etc.
It has been quite long that you haven't updated the database so I just did it in my fork, you can download the 2 files from down here:
https://github.com/NotNotMarshall/AndroidDeviceNames/tree/master/database
More than 3 thousand devices were added since Mar 2020 (last update of this library).
@jaredrummler There is issue on condition.
else if (TextUtils.isEmpty(model)) {
selection = COLUMN_MODEL + " LIKE ?";
selectionArgs = new String[] { model };
}
I think the condition will be edited like below
else if (!TextUtils.isEmpty(model)) {
selection = COLUMN_MODEL + " LIKE ?";
selectionArgs = new String[] { model };
}
I found this when I tried to fetch data with Build.MODEL
first.
Can anyone update DB? Because there are many new devices which are not recognized...
Updating my project to use the new version of this library added ~3mb to my app size. Are there any plans to address that?
Great library! Samsung Galaxy A3 (both old and 2017) seems to missing completely, my A3 (2017) lists as
Build.DEVICE="a3y17lte"
Build.MODEL="SM-A320FL"
Regards, winne42
Hello, first I would like to say this is a great library! Nice work
I have been trying to use HelpAction to open an email (similar to how the FeedbackAction works) and pre-populate the subject and some parts of the message body. Here is my attempt:
The problem is, whenever I tap the HelpAction button in the app I am getting an exception. Any idea what I am doing wrong here? Below is the exception trace.
03-24 17:29:08.866 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy D/Instrumentation: checkStartActivityResult() : Intent { act=android.intent.action.SEND flg=0x1 clip={null T:
------------------------------
App Version: 5.3 (5)
Device Market Name: Galaxy S8+
Model: SM-G955U
Manufacturer: samsung} (has extras) }
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.SEND flg=0x1 clip={null T:
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy I/chatty: uid=10326(u0_a326) com.cryptobuddy.ryanbridges.cryptobuddy identical 3 lines
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: ------------------------------
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: App Version: 5.3 (5)
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: Device Market Name: Galaxy S8+
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: Model: SM-G955U
03-24 17:29:08.874 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: Manufacturer: samsung} (has extras) }
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1968)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Instrumentation.execStartActivity(Instrumentation.java:1622)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Activity.startActivityForResult(Activity.java:4564)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Activity.startActivityForResult(Activity.java:4522)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:751)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Activity.startActivity(Activity.java:4883)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.Activity.startActivity(Activity.java:4851)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at com.vansuita.materialabout.util.IntentUtil.open(IntentUtil.java:53)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at com.vansuita.materialabout.util.IntentUtil$1.onClick(IntentUtil.java:46)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.view.View.performClick(View.java:6891)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.view.View$PerformClick.run(View.java:26083)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.os.Handler.handleCallback(Handler.java:789)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.os.Looper.loop(Looper.java:164)
03-24 17:29:08.875 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6938)
03-24 17:29:08.876 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at java.lang.reflect.Method.invoke(Native Method)
03-24 17:29:08.876 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
03-24 17:29:08.876 18717-18717/com.cryptobuddy.ryanbridges.cryptobuddy W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
I want to use the library but I just can't find the copyright intestation as specified by the Apache license.
Please update your copyright signature
I have a Nexus 5X, but DeviceName.getDeviceName()
returns "Shark 1S". It looks like both phones use the codename "bullhead", so I'm guessing the problem is related to that.
Any way you could put out a new version with an updated list of device names in your database?
thank you!
As an example:
/json/devices.json
file has below definitions:
{
"manufacturer": "Kobo",
"market_name": "Kobo Arc",
"codename": "zeus",
"model": "Arc"
},
{
"manufacturer": "Sony Ericsson",
"market_name": "Xperia Play",
"codename": "Zeus",
"model": "Zeus"
},
Note the different cases of "zeus"
and "Zeus"
.
Then in /json/codenames/Zeus.json
file, there is below content:
[
{
"manufacturer": "Kobo",
"market_name": "Kobo Arc",
"codename": "zeus",
"model": "Arc"
}
]
This happens for all the similar situations; such as "vision"
, "swift"
, "SCH-i509"
, "Pegasus"
,.. etc
I'm having trouble fetching market names of the phones getting model name instead of marketing name
When I view the raw JSON it shows that the market_name and model name are same for some device like Oppo.
Please confirm why oppo devices are considered as unrecognized devices in this list.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.