首页 文章 精选 留言 我的

精选列表

搜索[安卓设备管理],共8535篇文章
优秀的个人博客,低调大师

[安卓] 6、列表之ArrayAdapter适配

这个和以前的几个都有点不同,首先这个不用在xml中写对应的控件,而是直接在activity中将整个list实现的:首先要实例化列表和用于存储数据的数组list[9-10],第12-14行放list里加入3个数据,这里最不同的一点是要一个适配器:ArrayAdapter<String> aa ;这个适配器要在第20行实例化,并在21行lv.setAdapter(aa);将适配器数据映射ListView上~ lv = new ListView(this);//实例化列表 list = new ArrayList<String>();//实例化List 1 public class MainActivity extends Activity { 2 private ListView lv ;//声明一个列表 3 private List<String> list ;//声明一个List容器 4 private ArrayAdapter<String> aa ; 5 @Override 6 public void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.main); 9 lv = new ListView(this);//实例化列表 10 list = new ArrayList<String>();//实例化List 11 //往容器中添加数据 12 list.add("Item1"); 13 list.add("Item2"); 14 list.add("Item3"); 15 //实例适配器 16 //第一个参数:Context 17 //第二个参数:ListView中每一行布局样式 18 //android.R.layout.simple_list_item_1:系统中每行只显示一行文字布局 19 //第三个参数:列表数据容器 20 aa = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,list); 21 lv.setAdapter(aa);//将适配器数据映射ListView上 22 //为列表添加监听 23 lv.setOnItemClickListener(new OnItemClickListener() { 24 @Override 25 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 26 Toast.makeText(MainActivity.this, "当前选中列表项的下标为:"+arg2, Toast.LENGTH_SHORT).show(); 27 } 28 }); 29 this.setContentView(lv); 30 } 31 } 本文链接:http://www.cnblogs.com/zjutlitao/p/4229837.html 更多精彩:http://www.cnblogs.com/zjutlitao/ 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229837.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[安卓] 1、页面跳转+按钮监听

共2个layout:main.xml和other.xml;2个activity:MainActivity.java,OtherActivity.java 在mainactivity中重写onCreate,第6行设置按钮监听~ 1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.main); 4 Log.v("MainActivity", "onCreate"); 5 btn = (Button) findViewById(R.id.Main_btn); 6 btn.setOnClickListener(this); 7 //this.finish(); //结束当前MainActivity 8 } 下面是对按钮监听的实现:即当按钮被按下时,跳转到另一页面: 1 @Override 2 public void onClick(View arg0) { 3 if (arg0 == btn) { 4 Intent intent = new Intent(); 5 intent.setClass(this, OtherActivity.class); 6 this.startActivity(intent); 7 } 8 } 另一个activity也类似: 1 public void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.other); 4 Log.v("MainActivity", "onCreate"); 5 btn = (Button) findViewById(R.id.Other_btn); 6 btn.setOnClickListener(this); 7 } 1 public void onClick(View arg0) { 2 if (arg0 == btn) { 3 this.finish(); 4 } 5 } 有人会觉得OtherActivity为什么是那个样子的,暂时我也不清楚,先把他的xml文件贴下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/OtherActiviy_hello" 11 /> 12 <Button 13 android:layout_width="fill_parent" 14 android:layout_height="wrap_content" 15 android:text="@string/OtherActiviy_BtnClose" 16 android:id="@+id/Other_btn" 17 /> 18 </LinearLayout> 本文链接:http://www.cnblogs.com/zjutlitao/p/4229540.html 更多精彩:http://www.cnblogs.com/zjutlitao/ 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229540.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

安卓开发笔记——探索EventBus

1、关于EventBus: 组件通讯在Android开发中是不可避免的,随着业务需求的复杂化,代码中需要我们去处理的业务逻辑难度也不断增大。例如多个Fragment之间的数据传递,Service与Activity、Fragment之间的通讯,BroadCast与Activity、Fragment之间的通讯,各种startActivityForResult的使用,繁杂的操作令我们所厌倦,在GitHub上找了下解决方案,发现了一个不错的开源库EventBus,相信很多做过Android开发的朋友都或多或少对此有所了解。 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。 这是EventBus在GitHub上的开源库地址:https://github.com/greenrobot/EventBus EventBus的大体关系是这样的:订阅者(Subscriber)通过订阅事件(Event)到总线,事件发布者(Publisher)发布事件(Event)到总线被订阅者(Subscriber)接收,其实说白了就是软件设计模式里的观察者模式。EventBus在使用的时候就是在合适的地方发布一个事件,使得注册了该事件接收的对象就可以收到通知,进行相应的操作。 2、初探EventBus: 文绉绉的文字描述令人厌烦,直接上代码说话吧,先来看下要实现的效果: 看似很简单的效果,点击按钮跳转界面,利用Intent发送一个消息,然后TextView接收显示。这是传统上的做法,如果真是这样做,那么写这篇文章的就完全没意义了。其实这里就是利用到了EventBus,并没有用到Intent来传递消息。 先来看下具体的代码(记得添加EventBus的引用),然后我再分部来解析: MainActivity.java SecondActivity.java MyEvent 上面的代码很简单,这里只是抛砖引玉并不做太多复杂的操作,大家可以根据自己的项目需求来添加对应的代码。 3、解析代码: 1、注册EventBus: 在添加EventBus的引用后,我们就可以对任意类进行注册绑定和解绑EventBus事件,注册方法和反注册方法很简单,在上面的代码中就可以看出来了,分别是register和unregister,这里的EventBus.getDefault是获取到EventBus实例的意思(单例)。 1 //注册绑定EventBus 2 EventBus.getDefault().register(this); 3 //解绑EventBus 4 EventBus.getDefault().unregister(this); 2、EventBus事件: EventBus很灵活,它对事件不进行任何的限制,也不需要继承或者实现任何类或者接口,可以是任意类型的实体类,好比上面代码提到的MyEvent。 3、EventBus事件发布者: 有了事件之后,我们就可以对事件进行发布,然后可以被订阅这个事件的所有订阅者所接收。发送事件很简单,有两种方法post与postSticky: 1 //立即发送事件 2 EventBus.getDefault().post(Object event); 3 //延迟发送事件 4 EventBus.getDefault().postSticky(Objet event); 4、EventBus事件订阅者: EventBus的事件订阅者可以是任何已经进行注册EventBus的类,订阅者的数量是没有上限的(很重要,下文会提到),这里的订阅有4种方法,这里都是由onEvent开头的,有着一定的区别: 1、onEvent: 如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。 2、onEventMainThread: 如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。 3、onEventBackground: 如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。 4、onEventAsync: 使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync。 1 public void onEvent(Object event) {} 2 public void onEventMainThread(Object event) {} 3 public void onEventBackgroundThread(Object event) {} 4 public void onEventAsync(Object event) {} 介绍完EventBus里的所有角色后,我们来理一理订阅/被订阅流程: 首先,要想成为事件订阅者需要先对EventBus进行注册绑定,然后在本类需要去写一个以onEvent开头的方法来接收处理消息事件,再来我们需要一个自定义的事件可以让事件的发布者发布,让事件的订阅者接收。事件的发布可以通过post方法或者是postSticky方法发布。 4、EventBus所带来的一些方便之处: EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。这是我们在文章开头所介绍过的,这里就不多说了,说几个在实际开发中所运用到的地方。 例如: 1、当某个页面的某些值发生变化的时候,需要去同时去更改多个页面相对应的值,这时候只要这些类注册订阅了该事件,那么我们就可以很轻松通过post发送消息来进行通讯。 2、某些时候,我们并不希望发布出来的Event立即被消费掉,而是等到时机成熟。比如说,在一个详情页点赞之后,产生一个事件,这个事件并不立即被消费,而是等用户退出详情页回到商品列表之后,接收到该事件,然后刷新Adapter等。其实这就是之前我们用startActivityForResult和onActivityResult做的事情。这里我们就可以利用postSticky来实现这样的机制。 总之,EventBus极大的减轻了我们各种组件之间的通讯复杂度,也大大减少了使用ActivityForResult的麻烦。真实值得极力推荐。 5、理解EventBus 从源码中我们可以知道,当我们在类中注册绑定EventBus的时候,它会去扫描当前类并记录下所有已onEvent开头的方法,存放在一个Map<Key,Value>中,在事件通过post发布之后,EventBus会根据post中实参的类型,去Map中查找对应的方法,并找到了对应的Thread,最终利用Java的反射机制去执行我们的方法。 onEventMainThread表示这个方法会在UI主线程执行。 onEventPostThread表示这个方法会在当前发布事件的线程中执行。 BackgroundThread表示如果在非UI主线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。 Async加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个。 作者:佚名 来源:51CTO

优秀的个人博客,低调大师

安卓应用漏洞检查工具 QARK

QARK 详细介绍 QARK 全称 Quick Android Review Kit。这个工具用来寻找与 Android 应用相关的安全漏洞,包括检查源代码和打包的 APKs。这个工具还可以创建“Proof-of-Concept”可部署的 APKs 或 ADB 命令,能够利用许多它发现的漏洞。不需要 root 测试设备,因为这个工具专注于在其它安全环境下能被利用的漏洞。使用 在交互模式运行: $ python qark.py 在 headless 模式运行: $ python qark.py --source 1 --pathtoapk /Users/foo/qark/sampleApps/goatdroid/goatdroid.apk --exploit 1 --install 1 or $ python qark.py --source 2 -c /Users/foo/qark/sampleApps/goatdroid/goatdroid --manifest /Users/foo/qark/sampleApps/goatdroid/goatdroid/AndroidManifest.xml --exploit 1 --install 1 The sampleApps folder contains sample APKs that you can test against QARK 文章转载自 开源中国社区[https://www.oschina.net]

优秀的个人博客,低调大师

安卓开发环境配置及HelloWorld

一:JAVA 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.1 JAVA_HOME 1.2 PATH PATH属性已存在,可直接编辑。作用是用于配置路径,简化命令的输入,其值为:%JAVA_HOME%\bin。 1.3 CLASSPATH 用于编译时JAVA类的路径,注意这里设置的是两个值,(.;)表示的是JVM先搜索当前目录。其值为:.;%JAVA_HOME%\lib\tools.jar。 1.4 测试 配置完毕后,通过cmd运行以下命令:java -version,javac 如果出现返回信息,则设置成功。 二:eclipse 下载地址:http://www.eclipse.org/downloads 三:Android SDK 地址:http://developer.android.com/sdk/index.html。 设置path:C:\mywork\android\sdk\tools 四:ADT 离线包下载地址:http://developer.android.com/sdk/installing/installing-adt.html 下载之后,打开Eclipse→Help→Install New Software,选择Work with:后的Add...→在Local选项中输入Android Plugin→在Archive中找到ADT的压缩包→点击OK→在下面勾选Name中的选项即可。 安装完毕后,选择 Window -> Preferences ,在弹出面板中就会看到Android设置项,填上安装的SDK路径,则会出现刚才在SDK中安装的各平台包,按OK则完成配置。此时Android的环境就搭建完毕,可以进行Android项目的开发了。 五:HelloWorld 选择 File -> New -> Other -> Android -> Android Application Project。 一路NEXT,然后出现: 然后,项目上面点右键 Run As Android,会提示我们创建模拟器,我们设置如下: 最后,我们得到: 本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/p/4541924.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

[安卓] 3、EditText使用小程序

这里比较简单,看下面代码就能知道了:在按钮的点击事件时用String str = et.getText().toString();获取文本内容。 1 public class MainActivity extends Activity implements OnClickListener{ 2 private EditText et;//创建一个文本编辑的对象 3 private Button btn; 4 private TextView tv; 5 @Override 6 public void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.main); 9 et= (EditText)findViewById(R.id.et);//实例化文本编辑 10 btn= (Button)findViewById(R.id.btn); 11 btn.setOnClickListener(this); 12 tv = (TextView)findViewById(R.id.tv); 13 } 14 @Override 15 public void onClick(View v) { 16 if(v==btn){ 17 //获取EditText中的文本内容 18 String str = et.getText().toString(); 19 //让TextView将获取到的EditText内容str显示出来 20 tv.setText(str); 21 } 22 } 23 } 注意:从上面的效果可以看出输入框是密码类型,看xml文件就知道了:18行password属性为true. 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/hello" 11 android:id="@+id/tv" 12 /> 13 <EditText 14 android:layout_width="fill_parent" 15 android:layout_height="wrap_content" 16 android:hint="提示信息" 17 android:id="@+id/et" 18 android:password="true" 19 /> 20 <Button 21 android:layout_width="fill_parent" 22 android:layout_height="wrap_content" 23 android:text="获取EditText内容!" 24 android:id="@+id/btn" 25 /> 26 </LinearLayout> 本文链接:http://www.cnblogs.com/zjutlitao/p/4229742.html 更多精彩:http://www.cnblogs.com/zjutlitao 本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/4229742.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

安卓通过OkHttp获取json数据

使用Http协议访问网络 OkHttp使用 可以很好的获取接口数据!json数据! 支持get和post提交方式!!! 1.引入模块 compile 'com.squareup.okhttp3:okhttp:3.4.1' 然后系统会自动引入模块 2.设置权限 <uses-permission android:name="android.permission.INTERNET" /> 支持上网 3.布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/send_request" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Send Request" /> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/response_text" android:layout_width="match_parent" android:layout_height="wrap_content" /> </ScrollView> </LinearLayout> 4.实现功能 点击按钮,获取接口数据并展示 package demo.jq.com.networktest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.BufferedReader; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; /** * @author jim */ public class MainActivity extends AppCompatActivity implements View.OnClickListener{ TextView responseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button sendRequest = (Button) findViewById(R.id.send_request); responseText = (TextView) findViewById(R.id.response_text); sendRequest.setOnClickListener(this); } @Override public void onClick(View v) { if (v.getId() == R.id.send_request) { sendRequestWithOkHttp(); } } private void sendRequestWithOkHttp() { // 开启线程来发起网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; BufferedReader reader = null; try { OkHttpClient client = new OkHttpClient(); // post请求 RequestBody requestBody = new FormBody.Builder() .add("type","1") .build(); Request request = new Request.Builder() .url("http://devmg.yunlutong.com/api/test/testApi") .post(requestBody) .build(); Response response = client.newCall(request).execute(); String responseData = response.body().string(); showResponse(responseData); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } } }).start(); } private void showResponse(final String response) { runOnUiThread(new Runnable() { @Override public void run() { responseText.setText(response); } }); } } 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7705446.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

安卓面试中高级安卓开发工程师总结之——不可忽视的简历加分项

今天我们继续说说简历的问题。如何让自己的简历在众多简历中有更大的优势?如何给自己的简历加分? 说道加分项,这个跟市场有关。现在是2018年夏天。那么近2年来,前端什么比较火呢? 答案很多。但是有几点是可以确定的。指纹识别,人脸识别,语音识别,小视频(你有被快手,抖音中毒吗?),直播(这个最火的应该在2015-2016年),传感器。 这些,请至少尝试几个写一下,哪怕就是一个简单的demo。如果什么都不会,GitHub知道吧,搜索回吧,找几个别人写好的demo,然后下载下来,然后自己再敲一遍,试着改一改。可以吧。如果还不会,找我,你回吧。我的QQ你有吧,我教你行吧。如果你没有我的QQ ,那我给你留好吧578161213.如果还不会,那恭喜你,你已步入高级工程师前列(没有腺),你的高度,不是我等能企及的。 其实这些真的没有什么难的。比如,指纹识别。Google在6.0以后就有指纹识别的API了。FingerPrintManager,具体你可以发挥前端的强项了——面向百度编程。如果你找不到,又想短时间内狂补这个,请点击它:https://blog.csdn.net/csh86277516/article/details/68926931 但是指纹识别有一个很大的坑:因为谷歌在6.0才发布这个API,而在这之前,已经有很多公司自己做了指纹识别的功能,所以,不是所有的设备装的都是谷歌的原生API,所以面临这适配的问题。具体这个坑怎么解决?请点击它:https://www.cnblogs.com/popfisher/p/6063835.html 人脸识别,这个不一定要攻克,因为很多公司都已经攻克了,并且做的非常好。比如非死不可(FaceBook)的DeepFace。阿里也有人脸识别的SDK,我之前用过,不过是收费的,不贵,现在不知道免费了没。谷歌的FaceNet。这个不作为了解项。 语音识别,说到这个很多人又惊呆了。这个算法识别怎么做的,据说很难的。唤醒词都很难。我想说的是,应用在前端,真的不难。集成百度,科大讯飞,或者谷歌的语音识别SDK即可。在这里,博主用实践测试数据告诉大家,谷歌的语音识别最准确,甩科大讯飞,百度语音识别几条街(这么说,好像提高了百度,科大讯飞的档次。)。谷歌语音识别,精准度非常好,错误率非常非常低,并且用方言(部分地区方言,不是所有的)也能识别正确。 传感器。很多开发人员都没有调用过谷歌的传感器的API吧.传感器和canvas结合(别塞尔就好),会达到非常炫酷的效果。谷歌在很早就有了传感器的API,SensorManager就是传感器的一个综合管理类。 Android支持的传感器有如下几种: Sensor.TYPE_ACCELEROMETER加速度传感器 Sensor.TYPE_GYROSCOPE陀螺仪传感器 Sensor.TYPE_LIGHT亮度传感器 Sensor.TYPE_MAGNETIC_FIELD地磁传感器 Sensor.ORIENTATION方向传感器 Sensor.TYPE_PRESSURE压力传感器 Sensor.TYPE_PROXIMITY近程传感器 Sensor.TYPE_TEMPERATURE温度传感器 前提是ADB本身要有这些硬件传感器的支持,否则无效。 相信很多人都有过看直播,或者刷抖音,快手,微博的吧。这几年小视频的火热,一度让腾讯爸爸都做了各种限制(微信朋友圈不让分享这些小视频,同时自己也在做微视,不要脸的腾讯。各种抄袭,盗版,别人盗版还给作者一个活路,他是能把原作者抄死的那种。多少小学生,祖国的未来被他坑害了。)。 所以流媒体的开发应用也能为你的简历加分。这也是博主去面试多家公司得到的消息,要做小视频方向的开发。千真万确。那些公司我就不透露了。所以,赶紧试着写一些视频播放吧。给大家推荐GitHub上十二款最著名的Android播放器开源项目: 详见我的另一篇文章,github上十二款最著名的Android播放器开源项目

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册