1.python主è¦å¯ä»¥åä»ä¹
2.Text Mesh Pro图文混排如何对任何都能实现
3.androidå¼åç¨ä»ä¹è¯è¨ï¼
python主è¦å¯ä»¥åä»ä¹
python主è¦å¯ä»¥åWeb å Internetå¼åãç§å¦è®¡ç®åç»è®¡ãæ¡é¢çé¢å¼åã软件å¼åãå端å¼åçé¢åçå·¥ä½ãPythonæ¯ä¸ç§è§£éåèæ¬è¯è¨ãPythonå¯ä»¥åºç¨äºä¼å¤é¢åï¼å¦ï¼æ°æ®åæãç»ä»¶éæãç½ç»æå¡ãå¾åå¤çãæ°å¼è®¡ç®åç§å¦è®¡ç®çä¼å¤é¢åãäºèç½å ¬å¸å¹¿æ³ä½¿ç¨Pythonæ¥åçäºä¸è¬æï¼èªå¨åè¿ç»´ãèªå¨åæµè¯ã大æ°æ®åæãç¬è«ãWeb çã
æ©å±èµæ
pythonç主è¦ä¼ç¹ï¼
ç®åæå¦ï¼Pythonæ¯ä¸ç§ä»£è¡¨ç®å主ä¹ææ³çè¯è¨ãé 读ä¸ä¸ªè¯å¥½çPythonç¨åºå°±æè§åæ¯å¨è¯»è±è¯ä¸æ ·ãå®ä½¿ä½ è½å¤ä¸æ³¨äºè§£å³é®é¢èä¸æ¯å»ææç½è¯è¨æ¬èº«ãå ææå ¶ç®åç说æææ¡£ï¼Pythonæå ¶å®¹æä¸æã
è¿è¡é度快ï¼Python çåºå±æ¯ç¨ C è¯è¨åçï¼å¾å¤æ ååºå第ä¸æ¹åºä¹é½æ¯ç¨ C åçï¼è¿è¡é度é常快ã
å è´¹ãå¼æºèµæºï¼Pythonæ¯FLOSSï¼èªç±/å¼æ¾æºç 软件ï¼ä¹ä¸ã使ç¨è å¯ä»¥èªç±å°åå¸è¿ä¸ªè½¯ä»¶çæ·è´ãé 读å®çæºä»£ç ã对å®åæ¹å¨ãæå®çä¸é¨åç¨äºæ°çèªç±è½¯ä»¶ä¸ãFLOSSæ¯åºäºä¸ä¸ªå¢ä½å享ç¥è¯çæ¦å¿µã
å¯æ©å±æ§ï¼å¦æéè¦ä¸æ®µå ³é®ä»£ç è¿è¡å¾æ´å¿«æè å¸ææäºç®æ³ä¸å ¬å¼ï¼å¯ä»¥é¨åç¨åºç¨CæC++ç¼åï¼ç¶åå¨Pythonç¨åºä¸ä½¿ç¨å®ä»¬ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-Python
Text Mesh Pro图文混排如何对任何都能实现
1)Text Mesh Pro图文混排如何对任何都能实现
2)PlayerSettings.WebGL.emscriptenArgs设置无效的问题
3)Prefab对DLL中脚本的引用丢失
4)如何在第三人称蓝图模板中获得当前相机SpringArm的Target Arm Length
这是第篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
Q:目前Text Mesh Pro图文混排需要把打入图集并放入TMP的router源码Resources文件夹中。项目中想在任务UI面板展示很多装备或物品的icon,这些icon都是打好了的图集,很多别的系统也要用,不可能都放入TMP的这个资源文件夹里,但这样就无法进行图文混排,请问有什么解决办法吗?
A1:把TMP里面所有的Resources.Load接口,都替换成项目自身的手机信息获取源码Bundle加载接口,应该就可以解决了。
A2:可以注册以下回调:TextMeshProUGUI.OnFontAssetRequest,这样就可以自定义一个加载方法。 如果加载成功了,TMP就不会Resources.Load。
Q:游戏里用了C++的第三方库集成到xLua里面,端版是用CMake构建,可以配置宏、Include路径等,很方便。
我现在用Unity .3发布的WebGL版本,xLua是卧虎藏龙指标公式源码把所有Lua代码放在了“工程目录/WebGLPlugins”下面,在引擎里去#include这里的C代码,也没问题。
但是自己的C/C++代码比较多,也不能全部扔在同一个目录下,如果加了目录,就有跨目录Include的问题(主要是lua.h,lauxlib.h)。我从PlayerSettings.WebGL.emscriptenArgs = "-Imy_file_folder_path";这样设置搜索路径,但是没用;然后定义宏-Dxx也没用,不知道为什么。(参数中没有自己定义的路径和宏,都是震荡指标公式源码Unity自己的,虽然ProjectSettings.asset已经生效了。)请问有解决方案吗?
A:在Unity .2之后更新Emscripten,emscriptenArgs属性失效了,可以把Lua代码和C/C++代码都放到一个层级,然后改引用。 还有一个方式:找到你Unity安装目录\PlaybackEngines\WebGLSupport\BuildTools\Emscripten\emscripten\emcc2.py,如果没有emcc2.py就找emcc.py,在里面找到get_clang_command方法,这个方法就是拼接执行编译C/C++代码语句的,在[src_file]后面增加+ ['-IAssets/XXX/XXX'],注意-I和Assets之间没空格,大概这样子:
注意py文件缩进问题,物业系统源码分享多个文件夹就添加多个“-I”,我猜因为它自己有“-I.”参数,所以可以使用相对目录(对clang++编译不太熟,我在Windows的Unity .3.f1上使用可行。) compile_args变量是记录传进来的参数的,有精力也可以找找调用emcc2.py的地方传进来更合适,我这边没找到。 其它需要改C/C++编译参数的地方我也在这里改了,如果有其它更简便有效的方法,欢迎分享。
Q:开发时,不希望策划看到源码,于是将源码替换成DLL,但是这样挂在Prefab上的脚本引用会丢失,请问怎么解决?
A1:是原有的预制挂了CS,后面想打成DLL重新挂?如果是这样,遍历预制,去批量修改GUID和FileID。可参考文章 《Unity将C#脚本转换为DLL,Prefab等文件不丢失引用的方法(转)》,文章里面用了DLLSwitcher插件,也可以自己理解Prefab GUID fileID和DLL,CS文件对应的关系就行了。
A2:代码要分成底层和逻辑层。底层用DLL+Obfuscator,逻辑层就不能了,因为如果也加密,开发验收查bug都会费劲。 如果要防止策划带走代码,按照我说的底层DLL就行,即使他带出去,只有逻辑层的开发,后面也会一大堆问题,除非自己写底层,就要调试,时间还不如自己重新写,这样的博弈论一旦开始,这个代码库重要性就不高了。 同时也要防止策划带走服务端代码,做到服务端拿不到客户端,客户端拿不到服务端,这样即使有一方代码,也是无用代码。
Q:使用SpringArm组件会让相机在发生碰撞时拉近,但是为什么获得到的Target Arm Length值却一直不变?
A:在代码中,Target Arm Length永远是不变的,但是它下面有RelativeSocket,在蓝图中可以使用GetSocketTransform来获取,并且使用RTS_Component参数,取Location然后用VectorLength来计算:
还可以用SpringArm与Camera的位置相减来计算,分别GetWorldLocation再Sub和VectorLength:
可以发现两种方式得到的数据似乎有些小区别,这是因为该案例中还有一个相机跟随鼠标位置移动的功能,它会对Camera进行SetRelativeLocation,偏移其Y和Z值。方式一是从SpringArm中取,与Camera无关,所以不受偏移量影响;方式二用到了Camera的RelativeLocation,因此将偏移量也算了进去。 另外还有一种方式,无法计算距离,而是直接检测相机是否与世界发生了碰撞,发生碰撞时就会进行缩放。
androidå¼åç¨ä»ä¹è¯è¨ï¼
æ³å¦ä¹ å®åç³»ç»çå¼åéè¦å¦ä¹ ä»ä¹ç¼ç¨è¯è¨_å®åå¼åç¨ä»ä¹ç¼ç¨è¯è¨
éè¦å¦ä¹ 以ä¸ä¸¤ç§ç¼ç¨è¯è¨ï¼åå«æ¯ï¼
Javaè¯è¨
Androidåºç¨ç¨åºå¼åæ¯ä»¥Javaè¯è¨ä¸ºåºç¡çï¼æ以没æåå®çJavaåºç¡å¸¸è¯ï¼åªæ¯æºæ¢°çç §æä»äººç代ç ï¼æ¯æ²¡æä»»ä½å«ä¹çãå 为å¨Androidä½ç³»çæ¡æ¶å±å½ä¸ï¼ä½¿ç¨äºå¾å¤ç设计形å¼ï¼åå¦æ²¡æè¿ä¸ªæ¹é¢ç常è¯ï¼å ³äºAndroidçäºè§£å°±ä¼å¤§æææ£ãè§åå½¢å¼çç§ç±»ååä¹å¤ï¼ä¸ä¸ªä¸ä¸ªçå ¨é¨ææ¡ï¼æ¯ä¸ç°å®çï¼æè¡ç¢§æå¿ è¦é¦å ææ¡é¢å对象çåºç¡è®¾è®¡ååï¼æäºè¿äºåºç¡ååçæ¯æï¼å°±å¯ä»¥è§¦ç±»æéã
C/Cè¯è¨
Cè¯è¨æ¯ä¸ç§ç»æåè¯è¨ãå®å±æ¬¡æ¸ æ°ï¼ä¾¿äºæ §å¯æ模ååæ¹æ³å®æç¨åºï¼æäºè°è¯åä¿æ¤ãCè¯è¨çä½ç°æè½è£¤ç¾¡åå¤çæè½æ强ãå®ä¸åªå ·æ丰ççè¿ç®ç¬¦åæ°æ®ç±»åï¼ä¾¿äºå®æåç±»æä¹±çæ°æ®ç»æãCè¯è¨æ¯å½ä»æçè¡çç¨åºè®¾è®¡è¯è¨ä¹ä¸ï¼å®çåç¨ä¸°çã表达å强ãè¿ç¨æ´»ç»ä¾¿å½ãè¿ç¨é¢å¹¿ãæ¿çç¨åºé«ãå¯æ¤å ¥æ§å¥½ï¼æ¢æé«çº§è¯è¨çç¹å¾ï¼åæä½çº§è¯è¨ç许å¤ç¹å¾ï¼éå®ä½ä¸ºç³»ç»æç»è¯è¨ï¼æ¢è½å¤ç¨æ¥ç¼åç³»ç»è½¯ä»¶ï¼ä¹è½å¤ç¨æ¥ç¼åè¿ç¨è½¯ä»¶ã
androidæ¯ç¨ä»ä¹è¯è¨å¼åç_androidææºappå¼åè¯è¨androidæ¯åºäºlinuxçå¼æºæä½ç³»ç»ã
linuxæ¯ä½¿ç¨æ åCè¯è¨å¼åçæä½ç³»ç»ã
androidåºå±é©±å¨ä»¥åæä½ç³»ç»å æ ¸ä½¿æ亩ç¨Cè¯è¨ä»¥åæ±ç¼å¼åã
androidæä½ç³»ç»æ¬èº«æ¯ä½¿ç¨Javaå¼åï¼å¹¶ä½¿ç¨JNIè°ç¨æ¬å°çCè¯è¨åºï¼å®ç°æä½ç³»ç»åºå±è°åº¦ã
androidåºç¨æ¯ä½¿çè¿ æ£®ç¨Javaå¼åï¼åæ¶ä¹å¯ä»¥ä½¿ç¨C/Cnativeå¼åï¼ä½æ¯å¤æ°æ¶åä¸ææ¿ç¨ç¨å°Cãæ以åºæ¬ä¸å°±æ¯Java为æ åå¼åè¯è¨ã
android使ç¨äºä¿®æ¹è¿çJVMï¼Javaèææºï¼å«ådalvikèææºï¼å ¶æ¬è´¨è¿æ¯Javaèææºã
æ以对åºæ¯ä¸ä¸ªAPPé½ä¼å建个dalvikèææºï¼ä¹å°±æ¯ä¸ä¸ªlinuxè¿ç¨ã
说å¤æäºï¼å ¶å®å°±æ¯åºäºlinuxä¸çä¿®æ¹çJavaèææºï¼è¿è¡javaç¨åºã
å¸æè½å¤å¸®å°ä½ ï¼
Androidå¼åé½éè¦ä½¿ç¨ä»ä¹è¯è¨ï¼
Androidå¼åé½éè¦ä½¿ç¨ä»ä¹è¯è¨ï¼
Androidæ¯ä»¥Linuxä¸ºæ ¸å¿çææºæä½å¹³å°ï¼ä½ä¸ºä¸æ¬¾å¼æ¾å¼çæä½ç³»ç»ï¼éçAndroidçå¿«éåå±ï¼å¦ä»å·²å 许å¼åè 使ç¨å¤ç§ç¼ç¨è¯è¨æ¥å¼åAndroidåºç¨ç¨åºï¼èä¸åæ¯ä»¥ååªè½ä½¿ç¨Javaå¼åAndroidåºç¨ç¨åºçåä¸å±é¢ãé£ä¹ï¼Androidç³»ç»é½è½ä½¿ç¨åªäºè¯è¨æ¥å¼åå¢ï¼
å¨Androidä¸ï¼å¼åè å¯ä»¥ä½¿ç¨Javaä½ä¸ºç¼ç¨è¯è¨æ¥å¼ååºç¨ç¨åºï¼ä¹å¯ä»¥éè¿AndroidNDK使ç¨C/C++ä½ä¸ºç¼ç¨è¯è¨æ¥å¼ååºç¨ç¨åºï¼ä¹å¯ä½¿ç¨SL4Aæ¥ä½¿ç¨å ¶ä»åç§èæ¬è¯è¨è¿è¡ç¼ç¨
ï¼å¦ï¼pythonãluaãtclãphpççï¼ã
è¿æå ¶ä»è¯¸å¦ï¼Qtï¼qtforandroidï¼ãMonoï¼monoforandroidï¼çä¸äºèåç¼ç¨æ¡æ¶ä¹å¼å§æ¯æAndroidç¼ç¨ï¼çè³éè¿MonoDroidï¼å¼åè è¿å¯ä»¥ä½¿ç¨C#ä½ä¸ºç¼ç¨è¯è¨æ¥å¼ååºç¨ç¨åºã
å¦å¤ï¼è°·æè¿å¨å¹´ç¹å«åå¸äºé对åå¦è çAndroidSimpleè¯è¨ï¼è¯¥è¯è¨ç±»ä¼¼Basicè¯è¨ãèå¨ç½é¡µç¼ç¨è¯è¨æ¹é¢ï¼JavaScriptï¼ajaxï¼HTML5ï¼jqueryãsenchaãdojoãmoblãPhoneGapççé½å·²ç»æ¯æAndroidå¼åã
æ¤å¤ï¼è°·æå ¬å¸è¿æ¨åºäºGoogleAppInventorå¼åå·¥å ·ï¼è¯¥å¼åå·¥å ·å¯ä»¥å¿«éå°æ建åºç¨ç¨åºï¼æ¹ä¾¿æ°æå¼åè ã
freeswitchéè¦ä½¿ç¨ä»ä¹è¯è¨
FreeSWITCHæ¯ä¸ä¸ªå¼æºççµè¯è½¯äº¤æ¢å¹³å°ï¼ä¸»è¦å¼åè¯è¨æ¯Cï¼æäºæ¨¡åä¸ä½¿ç¨äºC++ï¼ä»¥MPL1.1åå¸ã
androidå¼åä¸ï¼è¿æ¥wifiéè¦ä½¿ç¨åªä¸ªå½æ°ï¼
å°±æ¯ç¨wifimanagerç对象ç´æ¥setWifiEnableå°±ç´æ¥å¼å ³äº~åæ°æ¯booleanå
ä½ æ²¡æ¾å°ä¼°è®¡æ¯ä½ 对象没æ¾å¯¹
ç¨WifiManagerwifi=(WifiManager)getSystemService(WIFI_SERVICE);
ä¹åwifi对象éåç§æ¥å£é½ææ¯å¦ç¶æçgetWifiState(),è¿æ¥ä¿¡æ¯çgetConnectionInfo()ï¼é便ç¨ï¼èªå·±ççå°±è¡äº~~æ¥ä¸æ¥æä¹ç¨å°±ä¸ç¨è¯´äºå§~~~
使ç¨vuejså¼åç¬ç«appandroidios端éè¦ä½¿ç¨ä»ä¹æ¡æ¶
MV*å æ¬MVCãMVPãMVVM
MVVMæ¡æ¶ç±ModelãViewãViewModelææã
Modelæçæ¯æ°æ®ï¼å¨å端对åºçæ¯JavaScript对象ã
Viewæçæ¯è§å¾ï¼å¨æ¸£æ¡å端对åºçæ¯DOM
ViewModelè§å¯ModelåViewçååæ¥åæ´æ°ï¼å®ç°äºæ°æ®çååç»å®ã
å端MVVMæ¡æ¶ä¸»è¦å æ¬ï¼angularJSãreactJSãVueJS
Androidå¼åä¸å¨åªäºåºåä¸ä¼éè¦ä½¿ç¨AIDL
ä¸¥æ ¼æ¥è¯´ï¼çº¿ç¨æ¯å ±äº«èµæºçï¼æ以线ç¨ä¹é´æ¯ä¸åå¨éä¿¡çï¼Androidéé¢çHandleæ¯ç¨æ¥è§£å³å¼æ¥è°ç¨çï¼è¿ä¸ªè§å¿µå¾éè¦ï¼æ³æç½äºï¼ä»£ç ä¹å°±åçæ´åçäºã
è¿ç¨ä¹é´å åçèµæºæ¯é离çï¼èAIDLï¼æ¯Androidæä¾çè·¨è¿ç¨éä¿¡IPCå·¥å ·Binderçå ·ä½ä½¿ç¨æ¹æ³ï¼è·å ¶ä»Linuxè·¨è¿ç¨éä¿¡ï¼socketï¼ç®¡éï¼è½åå ±äº«çï¼å¨æ¦å¿µä¸æ²¡å¥å·®ãæ以è¦å®ç°è·¨è¿ç¨çå å访é®ï¼æ¯å¦æ°æ®ä¼ è¾ï¼å½æ°è·¨è¿ç¨åæ¥è°ç¨çï¼å°±éè¦äºAIDLäºï¼å½ç¶äºAIDL并ä¸æ¯Androidä¸è·¨è¿ç¨éä¿¡çå¯ä¸éæ©ï¼socketï¼systemServerè¿ç¨ä¸zygoteè¿ç¨ï¼pkmsè°ç¨installè¿ç¨ï¼MountServiceä¸voldè¿ç¨éä¿¡é½æ¯éè¿socketï¼ï¼å ±äº«å åï¼sqlite3æ¥è¯¢å°±ç¨äºï¼ä»åçé½å¯ä»¥ç¨çï¼ä½æ¯æ²¡æBinderéè¿AIDL好ç¨ç½¢äºã
ä¸è¬é½ç¨å¨éè¦æ¯è¾å¤æçè·¨è¿å¦æåºç¨/线ç¨éä¿¡åºåãæ¯å¦èªå·±çç¨åºéè¦ç¨ä¸ä¸ªServiceå»å¤çåç§äºå¡ï¼èåéè¦è·Serviceè½ç¸äºè°ç¨çåºåã
è¦æ³¨æçæ¯AIDLä¸æ¯çº¿ç¨å®å ¨çï¼å¦æè¿æ¹é¢éè¦çè¯å°±è¦èªå·±å¤ç好临çæ åµã
请é®ecshopææºå®¢æ·ç«¯appåºç¨å¼åéè¦ä½¿ç¨ä»ä¹è¯è¨ï¼
ç¨javaå°±å¯ä»¥å¼åäºãå¦æä½ è¯´è¦å¼åä¸ä¸ªå®æ´ç客æ·ç«¯ï¼ä¸æ¯ä¸æ¥ä¸¤æ¥å¯ä»¥è¯´æ¸ æ¥ï¼å¯ä»¥èèæ¾ä¸ä¸åææºå¼åçå ¬å¸å¢éç»ä½ æå¡
å¦ä¹ androidå¼åé½éè¦åªäºåºç¡
ç°å¨å¤§å¦éé¢å计ç®æºç¸å ³çä¸ä¸çè³ç工类ä¸ä¸ä¸è¬é½ä¼å¼è®¾Cè¯è¨è¯¾ç¨ï¼åªæ¯å¾å¤åå¦å¨å¤§å¦æé´å¹¶æ²¡æ好好å¦ä¹ ï¼å¦æ对å®ææ¡çä¸å¤ªå¥½æè å¾ä¹ 没ç¨äºï¼å»ºè®®å ä»å°å ¶å¥½å¥½å¤ä¹ ä¸ä¸ï¼å°å ¶åºæ¬çè¯æ³å好好å顾ä¸ä¸ï¼æ好è½æ建ä¸ä¸ªç¯å¢æ¥è¿è¡ãè°è¯å®ãå¦æ没æå¦è¿ï¼ä¸å¦¨ä¹æåå¦ä¹ ä¸ä¸ãå¦ææ¯æ³å¦ä¹ Androidåºç¨å¼åï¼å°±å»å ·å¤ä¸å®çjavaåºç¡ãå 为Androidä¸çåºç¨å¤§å¤æ¯ç¨javaç¼åçï¼å¦ææ³ç¼åææºæ¸¸æååºç¨ï¼å°±éè¦å¦ä¹ javaãAndroidåºç¨ç¨åºå¼åæ¯ä»¥Javaè¯è¨ä¸ºåºç¡çï¼æ以没ææå®çJavaåºç¡ç¥è¯ï¼åªæ¯æºæ¢°çç §æå«äººç代ç ï¼æ¯æ²¡æä»»ä½æä¹çã建议å¨å®å课ç¨åæçjavaå¦ä¹ é¶æ®µä¸ï¼éè¦ç¨å¿çå¦å¥½ã
androidå¼åä»ä¹ç±»åç软件è¦ä½¿ç¨å°webService
ä¸è¬æ¯snsç±»çï¼webserviceå°±æ¯webæå¡æä¾ï¼éè¿restæä¸äºsoapapiæ¥è·åç¸å ³çæä¾åçå 容
微信å¼åºé½éè¦ä½¿ç¨ä»ä¹å·¥å ·ï¼
æèµå¾®ååï¼æä¸å®çææ¯ä¼å¿ï¼ä¸è¿ç°å¨ä¹æé对线ä¸å®ä½é¨åºçå·¥å ·ãåºæ¬ä¸ææç移å¨ç«¯æ¹é¢çè¥éå·¥å ·é½å¯ä»¥è¿ç¨çä¸ï¼å¯¹äºå¼æµæ¯å¾æ¾èç
å¼åAndroidAPP使ç¨çæ¯ä»ä¹è¯è¨ï¼å¼åAndroidAPPå¯ä»¥ä½¿ç¨Javaè¯è¨åCè¯è¨ã
Javaæ¯ä¸ç§ç¼ç¨è¯è¨ï¼è¢«ç¹æ设计ç¨äºäºèç½çåå¸å¼ç¯å¢ãJavaå ·æ类似äºC++è¯è¨çâå½¢å¼åæè§âï¼ä½å®è¦æ¯C++è¯è¨æ´æäºä½¿ç¨ï¼èä¸å¨ç¼ç¨æ¶å½»åºéç¨äºä¸ç§â以对象为导åâçæ¹å¼ã
使ç¨Javaç¼åçåºç¨ç¨åºï¼æ¢å¯ä»¥å¨ä¸å°åç¬ççµèä¸è¿è¡ï¼ä¹å¯ä»¥è¢«åå¸å¨ä¸ä¸ªç½ç»çæå¡å·æ»å¨ç«¯å客æ·ç«¯è¿è¡ãå¦å¤ï¼Javaè¿å¯ä»¥è¢«ç¨æ¥ç¼å容éå¾å°çåºç¨ç¨åºæ¨¡åæè appletï¼å为ç½æ迹渣页çä¸é¨å使ç¨ãappletå¯ä½¿ç½é¡µä½¿ç¨è åç½é¡µä¹é´è¿è¡äº¤äºå¼æä½ã
Cè¯è¨æ¯ä¸é¨éç¨è®¡ç®æºç¼ç¨è¯è¨ï¼å¹¿æ³åºç¨äºåºå±å¼åãCè¯è¨ç设计ç®æ æ¯æä¾ä¸ç§è½ä»¥ç®æçæ¹å¼ç¼è¯ãé«æå¤çä½çº§åå¨å¨ã产çå°éçæºå¨ç 以åä¸éè¦ä»»ä½è¿è¡ç¯å¢æ¯æ便è½è¿è¡çç¼ç¨è¯è¨ã
尽管Cè¯è¨æä¾äºè®¸å¤ä½çº§å¤ççåè½ï¼ä½ä»ç¶ä¿æçè¯å¥½è·¨å¹³å°çç¹æ§ï¼ä»¥ä¸ä¸ªæ åè§æ ¼ååºçCè¯è¨ç¨åºå¯å¨è®¸å¤çµèå¹³å°ä¸è¿è¡ç¼è¯ï¼çè³å å«ä¸äºåµå ¥å¼å¤çå¨ï¼åçæºæ称MCUï¼ä»¥åè¶ çº§çµèçä½ä¸å¹³å°ã
ææºä¸çå®åæä½ç³»ç»æ¯ä»ä¹è¯è¨ç¼ç¨_å®åç³»ç»æ¯ç¨ä»ä¹è¯è¨ç¼åç1ï¼Androidç³»ç»æ¡æ¶å±æ¬¡ãAndroidç³»ç»å æ ¸æ¯åºäºLinuxç³»ç»å¼åèæ¥çï¼æéé«åº¦èªç±ï¼çææºä»£ç å®å ¨å¼æ¾ï¼æ¯ä¸ç§æå±æ§é常强çæä½ç³»ç»ï¼å è´¹å¼æºï¼å¯å®å¶ï¼è¿ä¹æ¯è¿ éé£é¡å ¨ççåå å§ï¼ä¸»è¦ä½¿ç¨å¯¹è±¡æ¯ç§»å¨è®¾å¤ï¼ç±Googleåå¼æ¾ææºèçé¢å¯¼åå¼åãå ¶å æ ¸ç¼ç¨è¯è¨æ¯c/cãandroid使ç¨dalvikèææºå¶ï¼æ¬è´¨ä¸å®æ¯ä¸ä¸ªJavaèææºãèä¸å¯¹äºæ¯ä¸ä¸ªAPPé½ä¼å建个dalvikèææºï¼ä¹å°±æ¯ä¸ä¸ªlinuxè¿ç¨ã
2ï¼åæ©æ¶²androidåºå±é©±å¨ï¼ä»¥åæä½ç³»ç»å ¨é¨å æ ¸é½æ¯ä½¿ç¨Cè¯è¨åæ±ç¼è¯è¨ç¼ç¨å¼åãä½æ¯androidæä½ç³»ç»æ¬èº«æ¯ä½¿ç¨Javaå¼åï¼ä½¿ç¨JNIè°ç¨æ¬å°çCè¯è¨åºï¼ç±æä½ç³»ç»å®ç°å¯¹åºå±è°ç¨ã
3ï¼androidåºç¨å¼åï¼å³ææºappå¼åï¼ä½¿ç¨çæ¯Javaè¯è¨ï¼ä¸è¬ä¸ä¼ç¨å°c/cè¯è¨ãå æ¤ï¼æ³æ身ææºåºç¨å¼åçå°ä¼ä¼´ä»¬å·§ç©ï¼å¯ä»¥ç´æ¥é»ç Javaè¯è¨å³å¯ã
æ»ç»æ¥è¯´ï¼å®åç³»ç»ä¹åªä¸è¿æ¯åºäºlinuxç³»ç»å æ ¸å¼åçä¸ä¸ªJavaèææºï¼ç¶åå¨èææºéè¿è¡javaç¨åºãå°±åæ们å¨windowsçµèéå®è£ ä¸ä¸ªèææºï¼è¿è¡å ¶å®æä½ç³»ç»è¿è¡è½¯ä»¶æµè¯ä¸æ ·ï¼è¿ä¸ªå ¶å®çæä½ç³»ç»å°±ç¸å½äºå®åï¼ç¶å大家å¼åçææ软件ï¼å¨è¿ä¸ªèææºé使ç¨ã
å¸æå¯ä»¥å¸®å°æ¨ï¼è°¢è°¢ï¼
å®åç¨çæ¯ä»ä¹è¯è¨å¼åçå®åå®æ¹å¼åè¯è¨ï¼Kotlinåæ¢
Kotlinæ¯ä¸ç§å¨Javaèææºä¸æ§è¡çéæåå«ç¼ç¨è¯è¨ï¼ç±è´ºå¼JetBrainså¼åå¢éæå¼åã该è¯è¨æå 个ä¼å¿ã
å®å¤§å¤§åå°éè¦è¯æè´ºåçæ ·æ¿ä»£ç çæ°éãé¿å 空æéå¼å¸¸çæ´ä¸ªç±»çé误ãæ建æå¡å¨ç«¯ç¨åºãAndroidåºç¨ç¨åºæè å¨æµè§å¨ä¸è¿è¡çå端ç¨åºãéè¿%Javaäºæä½æ§ï¼å©ç¨JVMæ¢ææ¡æ¶ååºã
å¨Kotlinä¸åé声ææ两ç§ç±»åï¼val修饰åéæ¯åªè¯»åéå³åªè½èµå¼ä¸æ¬¡ï¼å次èµå¼æ¶å°±ä¼ç¼è¯é误ï¼å¦æéè¦å¤æ¬¡ä¿®æ¹å¼å°±éè¦ä½¿ç¨varã
æ©å±èµæï¼
TheIntelliJKotlinæ件æ©å±äºJavaç¼è¯å¨ä½¿å¾Kotlin代ç è½å¤å¾ä»¥ç¼åãç¼è¯åè°è¯ãé¤æ¤ä¹å¤ï¼å ³äºåºæ¬çJavaéåï¼å·²ç»æç¼å好ç帮å©å½æ°ï¼å¯ä»¥æ´é¡ºç å°è¡æ¥å°å¨Java8ä¸åºç°çéåæ©å±ã
Kotlinï¼ç±»ä¼¼Xtendä¸æ ·ï¼æ¨å¨æä¾ä¸ç§æ´å¥½çJavaèéé建æ´ä¸ªæ°å¹³å°ãè¿ä¸¤ç§è¯è¨é½åä¸ç¼è¯ä¸ºåèç ï¼è½ç¶Xtendæ¯é¦å 转æ¢æç¸åºçJava代ç ï¼å让Javaç¼è¯å¨å®æç¹æ°æ´¾éçå·¥ä½ï¼ï¼èä¸ä¸¤è é½å¼å ¥äºå½æ°åæ©å±å½æ°ï¼å¨æ个æéèå´å éæå°å¢å ä¸ä¸ªæ°æ¹æ³å°æ个已æç±»åçè½åï¼ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-Kotlin