亚洲色成人网站www永久,亚洲欧美人成视频一区在线,亚洲国产成人高清在线观看,亚洲精品久久久久久动漫,亚洲国产精品久久电影欧美

數(shù)據(jù)專欄

智能大數(shù)據(jù)搬運工,你想要的我們都有

科技資訊

科技學(xué)院

科技百科

科技書籍

網(wǎng)站大全

軟件大全

HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我是這樣做的:
Model::find()->asArray()->select('...')->join(.....)->joni(....)->where(...)->all();
只返回了一條,我拿sql去數(shù)據(jù)庫執(zhí)行有三條記錄,然后我all()改成count()也是返回的3,
為什么all()只返回一條記錄????
技術(shù)問答
2014-09-02 16:02:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> Problem 1 - yiisoft/yii2-mongodb 2.1.x-dev requires ext-mongodb >=1.0.0 -> the requested PHP extension mongodb is missing from your system. - yiisoft/yii2-mongodb 2.1.1 requires ext-mongodb >=1.0.0 -> the requested PHP extension mongodb is missing from your system. - yiisoft/yii2-mongodb 2.1.0 requires ext-mongodb >=1.0.0 -> the requested PHP extension mongodb is missing from your system. - Installation request for yiisoft/yii2-mongodb ^2.1 -> satisfiable by yiisoft/yii2-mongodb[2.1.0, 2.1.1, 2.1.x-dev]. To enable extensions, verify that they are enabled in those .ini files: - E:\wamp\bin\php\php5.5.12\php.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
技術(shù)問答
2016-09-12 11:37:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
代碼在本地的pycharm上是可以正常運行的,但通過 pyinstaller -F -w 轉(zhuǎn)換成EXE后就報錯了
然后我用 CMD 運行 提示說
然后我也按照網(wǎng)上說的 在第一行 添加字符轉(zhuǎn)換 可還是不行,到底是那個地方出錯了呢? 請教下大家

我付上源代碼: # -*- coding: utf-8 -*- import wx from win32con import AW_ACTIVATE, AW_BLEND, AW_CENTER, AW_HIDE, AW_HOR_NEGATIVE, \ AW_HOR_POSITIVE, AW_SLIDE, AW_VER_NEGATIVE, AW_VER_POSITIVE, SPI_GETWORKAREA import win32api from ctypes import windll, c_int class Popup(wx.MiniFrame): def __init__(self, label, parent=None, title=""): wx.MiniFrame.__init__(self, parent, -1, title, wx.DefaultPosition, size=(580, 280), style=wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP) for monitor in win32api.EnumDisplayMonitors(): monitor_info = win32api.GetMonitorInfo(monitor[0]) if monitor_info['Flags'] == 1: break workarea = monitor_info['Work'] pos = (workarea[2] - 580, workarea[3] - 280) bg = wx.Colour(255, 255, 225) self.SetBackgroundColour(bg) self.SetPosition(pos) text = wx.StaticText(self, -1, label) text.SetBackgroundColour(bg) flags = AW_SLIDE | AW_VER_NEGATIVE | AW_ACTIVATE windll.user32.AnimateWindow(c_int(self.GetHandle()), c_int(800), c_int(flags)) self.Refresh() self.Bind(wx.EVT_CLOSE, self.RemovePopup) def RemovePopup(self, evt=None): flags = AW_BLEND | AW_HIDE windll.user32.AnimateWindow(c_int(self.GetHandle()), c_int(800), c_int(flags)) self.Destroy() if __name__ == '__main__': app = wx.App(False) f = Popup('測試右下角彈出框\n測試右下角彈出框\n\n') f.Show() app.MainLoop()
技術(shù)問答
2019-11-24 22:38:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
說好的多線程呢?請問這個是什么原因?
技術(shù)問答
2019-11-23 11:44:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
1,我在網(wǎng)上查了一些資料,python調(diào)用DLL需要安裝一個外部ctypes庫,但是我按照說明操作,安裝ctypes提示失敗,不知道什么問題

2,如果安裝ctypes成功了,我的動態(tài)鏈接庫放在pycharm項目下新建一個文件夾,那我要怎么把它加載進來,能有個簡單的例子嗎?
dll文件和文檔說明我都上傳到百度云了:
https://pan.baidu.com/s/1y6NPca1JVGa6yXPUzaYuVw
技術(shù)問答
2019-10-23 10:20:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
做一個局域網(wǎng)內(nèi)的點餐系統(tǒng)
一臺服務(wù)器(啟動點餐系統(tǒng)的),一臺路由器,一臺平板電腦,一個熱敏打印機。
流程是:服務(wù)器啟動點餐系統(tǒng),服務(wù)器連著路由器Wi-Fi,平板電腦連著路由器Wi-Fi,那么平板電腦通過瀏覽器訪問服務(wù)器上面的點餐系統(tǒng),就可以訪問到這個點餐系統(tǒng)。平板在點餐系統(tǒng)上下單,會彈出瀏覽器自帶的打印功能,選擇打印機,然后打印小票。
業(yè)務(wù)場景模擬:服務(wù)員拿著平板電腦,顧客在平板上進行點餐,服務(wù)員下單,廚房打印小票,廚師做飯。

現(xiàn)在的問題是:
自己買了一個得力的DL-581PW型號熱敏打印機,可以插USB,連接藍(lán)牙。
1.直接將熱敏打印機插到服務(wù)器上面可以進行打印小票。(有線連接成功)
2.但是這個熱敏打印機使用蘋果筆記本的藍(lán)牙無法連接,需要安裝驅(qū)動,官網(wǎng)沒有 (無線連接失敗)
3.使用蘋果手機訪問服務(wù)器地址,連接了藍(lán)牙,但是打印的時候也是找不到打印機(無線連接失?。?
4.使用windows系統(tǒng)的筆記本電腦訪問服務(wù)器,連接了藍(lán)牙,直接顯示驅(qū)動程序無法使用(無線連接失?。?
5.使用windows系統(tǒng)的筆記本電腦訪問服務(wù)器,服務(wù)器USB連接打印機并共享,沒用藍(lán)牙,可以打印小票(無線連接成功),但是我不太符合業(yè)務(wù)場景,我得拿著筆記本電腦找客人點餐。
6.使用平板電腦瀏覽器訪問服務(wù)器地址,安卓平板電腦藍(lán)牙連接打印機,現(xiàn)在還沒有試(無線連接-沒有試)


我想的無線連接解決方法是:
1. 將藍(lán)牙熱敏打印機更換為無線熱敏打印機(比較貴)或者網(wǎng)口打印機,這樣在同一個路由器下,就可以訪問了。
2. 更改代碼

但是思路還是不太清晰。

之前見過的一個點餐系統(tǒng),是部署到公網(wǎng)上面的,然后商家通過網(wǎng)口連接熱敏打印機,在點餐系統(tǒng)上面配置打印機參數(shù),然后通過平板進行點餐。而且下單之后是直接出單的。
我的這個打印的時候,還會彈出打印的預(yù)覽界面,點一下打印才會打印。

總的來說就是倆個問題:
1.如何解決無線連接的問題?
2.如何實現(xiàn)點擊打印直接打印,不彈出預(yù)覽界面?
技術(shù)問答
2019-07-18 13:47:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
colums : 'colum,count' 怎么把這種字符串轉(zhuǎn)換為字典呀 。大佬們有知道的嗎 用eval和json.loads也不好使
技術(shù)問答
2019-07-03 16:57:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
錯誤為ImportError: No module named cv2,應(yīng)該怎么解決
技術(shù)問答
2018-10-23 16:22:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
想用python實現(xiàn)這樣一個功能,當(dāng)我在程序中輸入1時,把excel表中A列列名輸出出來,例如:我輸入1,程序打印A,我輸入2,程序打印B,我輸入3,程序打印C,我輸入26,程序打印Z,我輸入27,程序打印AA等等這樣以此類推,我隨便輸入一個數(shù),Python程序就把對應(yīng)EXCEL表的列名返回給我,程序該怎么實現(xiàn)。 幫幫忙??!大佬們?。?
技術(shù)問答
2019-05-31 16:43:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
具體情況如下:
"E:\Pycharm\PyCharm 2018.3.5\bin\runnerw64.exe" C:
技術(shù)問答
2019-04-26 17:20:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
代碼如下: import re a='abc123de45xy11' m=r"[0-9]+" num=re.findall(m,a) print(num)
輸出如下:
而在IDLE輸入相同的代碼時,沒有這個問題:
技術(shù)問答
2019-05-12 19:19:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
編程新手,學(xué)習(xí)python,按照網(wǎng)上的視頻實例寫的代碼,步驟也都沒問題,同樣的操作,顯示的結(jié)果不一樣;按照例子應(yīng)該顯示數(shù)據(jù)個數(shù)10個,和最大值“maxdata165”(第四張圖),一直沒搞明白為什么,百度了下回答都不太清晰。求解?。?!
技術(shù)問答
2019-04-04 12:07:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
自己有開發(fā)板,但是沒用安卓系統(tǒng)源碼,想直接拿開源的Android源碼進行從新定制系統(tǒng)。是否可以實現(xiàn),若是可以有好的方法么,或者是要注意或者修改哪些部分?
具體情況如下:
1、硬件供應(yīng)商已經(jīng)找不到了,所以已經(jīng)無法獲取源碼進行修改,
2、主板芯片是sp9832a,看情況是集成板,
3、原來開發(fā)版上的系統(tǒng)是Android6.0的,基帶版本:fm_base_15c_w17.15.4,內(nèi)核:3.10.65 ubuntu。

技術(shù)問答
2020-03-02 16:55:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
對于android anti hook 大家有沒有好的方案啊。
技術(shù)問答
2017-01-17 15:23:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
RT,十分不解,很多純ndk的android應(yīng)用都喜歡直接用NDK sample代碼里面的android_native_app_glue.h android_native_app_glue.c直接做應(yīng)用開發(fā),就那么幾行代碼至于么?
為啥沒人用native_activity做?那個結(jié)構(gòu)體跟sdk java版的activity十分相似,而且響應(yīng)流程也一樣,非得封一個事件版的而且事件名字還起的很奇葩,用pipe傳輸命令然后多線程加鎖的同步的方式傳遞消息參數(shù),尼瑪這樣會比使用c++的虛函數(shù)高效率?
而且在saveinstance的時候,將state保存直接就一個malloc,然后memcpy,這native直接就將c++排除在外,而且具體關(guān)于那個state保存怎么用連個回調(diào)函數(shù)和事件都沒預(yù)留,還不如不寫。
即使像那代碼那樣封裝成消息機制,像windows那樣阻塞彈窗口,一樣會導(dǎo)致android系統(tǒng)會爆程序沒響應(yīng),這寫有意義嗎?還不如直接用native_activity那結(jié)構(gòu)體自己填回調(diào)函數(shù)來的簡單。
技術(shù)問答
2014-08-08 23:46:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 最近遇見個難題,APP 如何識別模擬器,發(fā)現(xiàn)陌陌 飛凡等APP都可以識別出來模擬器,自己百度搜索許多方法都解決不了自己的需求,求大神告訴APP如何有效的識別模擬器。
技術(shù)問答
2016-05-16 16:52:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> android 串口調(diào)試 為什么用adb shell命令找不到ttyS2已經(jīng)用這個命令 emulator @4412 -scale auto -qemu -serial COM8 啟動了安卓模擬器COM8 是win下usb轉(zhuǎn)com的 已證實可以用 但就是找到不/dev/ttyS2 有沒有人遇到?
技術(shù)問答
2016-02-28 00:02:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
前言
本文在Ubuntu 64位系統(tǒng)上對qemu項目進行交叉編譯,并且只編譯與qemu user mode有關(guān)的代碼。
下文中的”NDK”若無特殊說明均指”Android NDK”。
下文中”$NDK”表示的是NDK的根目錄。
步驟
1. 下載并安裝Android NDK
下載并安裝Android NDK的過程在這里不做介紹。
2. 下載qemu
3. 設(shè)置NDK工具的環(huán)境變量
為交叉編譯設(shè)置Android NDK環(huán)境變量:NDK、SYSROOT
4. 編譯依賴庫
glib
編譯可在Android上運行的glib庫
編譯參考資料: 編譯可在Android上運行的glib庫
libpng12
下載地址: https://sourceforge.net/projects/libpng/files/libpng12/
編譯參考資料: 編譯可在Android上運行的libffi庫
5. 創(chuàng)建pkg-config的軟鏈接
ln命令中的源路徑是pkg-config工具的源路徑。
如果不創(chuàng)建這個軟鏈接,當(dāng)執(zhí)行configure腳本時會報下面的錯誤:
6. 修改configure
添加arm的PIE支持
找到下面的代碼:
將”i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD”更改為”i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD|arm-Linux”。
如果不這么做的后果, 使用”readelf -S qemu-arm”查看編譯出來的qemu-arm可執(zhí)行文件的段,可以發(fā)現(xiàn)所有在運行時可加載段的地址均以0x60000000為基址。
在configure中有這么一段代碼:
如果 textseg_addr”這個命令行選項,這個命令行選項指定text段的基址。在腳本的后面textseg_ldflags會被添加到ldflags中。
如果qemu-arm可加載段的基址為0x60000000,當(dāng)qemu-arm在Android設(shè)備上運行時將會發(fā)生”Segmentation fault”,詳情請參考 Android上可執(zhí)行ELF文件中的段不能有基址 。
7. 運行configure


命令行解析
configure腳本會在終端輸出一些關(guān)鍵的信息,如:用什么編譯器,flags等。

PKG_CONFIG_PATH
上面命令中的 PKG_CONFIG_PATH="$SYSROOT/usr/lib/pkgconfig "是必要的,如果不設(shè)置這個宏,configure腳本輸出”CFLAGS”的內(nèi)容見下:
關(guān)注”-I”后的路徑,首先說一下這個路徑是怎么來的,configure腳本中有下面的代碼:

“glib_cflags=$pkg_config --cflags $i“語句會獲得glib的包含目錄,看這篇文章的人如果電腦上安裝有g(shù)lib2.0可以通過這個命令進行查看輸出內(nèi)容:pkg-config –cflags glib-2.0。 然而這個路徑并不是我想要的,因為我現(xiàn)在是交叉編譯,目標(biāo)是ARM,所以我在這里將一個新的pkgconfig目錄路徑設(shè)置到PKG_CONFIG_PATH宏,輸入下面的命令查看輸出內(nèi)容:

輸出內(nèi)容:
會發(fā)現(xiàn)此時”-I”后的路徑有了改變。
注意:pkgconfig是一個目錄,在這個目錄中包含了步驟5中安裝的依賴庫的信息。

–target-list –cpu
–target-list arm-linux-user 意味著編譯出來的qemu程序用于user mode,可以執(zhí)行arm指令,并且這個arm指令的可執(zhí)行程序的執(zhí)行環(huán)境基于linux系統(tǒng)。
–cpu=arm 意味著編譯出的qemu程序只能在arm機器上執(zhí)行。

–disable-system –disable-bsd-user
–disable-system:不編譯system mode的代碼。
–disable-bsd-user:不編譯bsd user mode的代碼。

–cross-prefix
交叉編譯工具的前綴,在當(dāng)前命令行中它的值為”arm-linux-androideabi-“,那么configure腳本會去查找名為arm-linux-androideabi-gcc、arm-linux-androideabi-g++等工具。

–disable-tools
當(dāng)命令行中有–disable-tools選項時,腳本中的禁用want_tools宏將被設(shè)置為”no”,這個宏默認(rèn)為”yes”。當(dāng)want_tools宏為”yes”時,會對tools宏進行設(shè)置,下面是與want_tools有關(guān)的設(shè)置tools宏的代碼:
configure腳本會將tools宏的內(nèi)容寫入config-host.mak文件。

–disable-guest-agent
當(dāng)沒有這個選項時,編譯會報下面的錯誤:
為PC編譯qemu項目沒有這個命令選項時不會報這個錯誤,然而lockf函數(shù)在Android上并不存在,所以為Android編譯qemu項目時會報這個錯誤。
編譯錯誤排除
ld: error: cannot find -lutil
將根目錄下的Makefile文件中下面的內(nèi)容注釋:
ifaddrs.h: No such file or directory
錯誤信息
修復(fù)辦法: 將這個鏈接中的源文件都下載下來: android-ifaddrs ,將下載下來的文件拷貝到qga/目錄下。然后找到qga/Makefile.objs文件,將”ifaddrs.o”插入”qga-obj-$(CONFIG_POSIX)”宏中。
mqueue.h: No such file or directory
錯誤信息
修復(fù)辦法: 將”#include ”更改為”#include ”。
char __unused[128 - sizeof(target_sigset_t)];
錯誤信息
修復(fù)辦法: 將__unused更改為_unused。
syscall.c:4108:9: error: dereferencing pointer to incomplete type
錯誤信息

修復(fù)辦法


改為
disas/arm-a64.cc:67: error: undefined reference to ‘__cxa_end_cleanup’
錯誤信息


解決辦法 : 在configure中找到下面的代碼:

將這些代碼注釋掉:
原因分析 : 目前在Android NDK中沒有64位版本的object。
syscall.c中找不到符號
錯誤信息

解決辦法 : 在syscall.c文件中寫下面的內(nèi)容:



編譯清理命令
執(zhí)行下面兩個命令:
make clean
make distclean
編譯debug版
調(diào)用configure腳本的命令行中添加”–enable-debug”命令選項。

作者:尋禹 @阿里聚安全 ,更多技術(shù)文章,請訪問 阿里聚安全博客
技術(shù)問答
2016-07-20 16:33:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
ndk下載好了 系統(tǒng)path也設(shè)置好了 eclipse里的ndk路徑也設(shè)置好了
但是一添加add ndk support就會出錯:
然后一運行就出現(xiàn)不能run的錯誤了。。
技術(shù)問答
2017-02-12 15:00:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
mac 系統(tǒng) 10.9
jdk 1.7
ndk n9
android api : 19
curl 7.3
直接把curl的源碼放到 eclipse里面去編譯各種報錯
求有經(jīng)驗的指點一下本人對C++不熟只是初學(xué)者
技術(shù)問答
2014-07-17 19:18:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
android studio的libs下面有很多裝so文件的文件夾。
我想問下,這些都是必須的嗎?我只留armeabi armeabi-v7a x86行嗎?網(wǎng)上有些帖子說 armeabi armeabi-v7a x86 可以兼容全平臺,是這樣的嗎?現(xiàn)在主流設(shè)備都是哪種架構(gòu)?
技術(shù)問答
2016-11-24 10:32:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
現(xiàn)在是jni方法里 有問題,怎么進行處理?
現(xiàn)在只會java語言,不會C++
技術(shù)問答
2016-08-04 10:32:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
android bitmap生成圖片如何達(dá)到200dpi
需要NDK 開發(fā)實現(xiàn)么?
技術(shù)問答
2016-07-01 10:33:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
有個方法一直不明白該怎么用,想請教各位一下
View android.view.LayoutInflater.inflate(XmlPullParser parser, ViewGroup root);
LayoutInflater inflater = LayoutInflater.from(this);

view = inflater.inflate(parser, null);
這個方法應(yīng)該怎么用?
是不是代表我在res文件夾以外的地方放layout布局文件,通過這個方法也能加載成View呢?
技術(shù)問答
2016-06-20 15:40:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
最近剛開始研究ndk這塊,寫了最簡單的返回固定字符串,編譯時報
Error:(194) *** Android NDK: Aborting... . Stop.

android studio 2.1,ndk 12,jdk 1.8 gradle 2.1.0
網(wǎng)上大概查了下,說是需要ndkr9+,12應(yīng)該可以吧……不知道怎么辦了
技術(shù)問答
2016-05-11 17:01:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>

親愛 的程序猿(媛)們,您在開發(fā) Android 程序的過程中有沒有遇到以下的情況 用戶反饋 XXX 頁面卡頓,打不開。但是程序猿哥哥說在我這里是好的呀! 用戶反饋 APP 在 XX 手機閃退。但是程序猿哥哥說我在那個手機測試沒問題呀! 用戶反饋 APP 在 XX 地區(qū)加載不出來,菊花一直轉(zhuǎn)轉(zhuǎn)轉(zhuǎn)!但是程序媛妹子說,在我這里。。。
諸如此類的問題,估計程序猿(媛)們經(jīng)常的被產(chǎn)品汪、大 Boss,運營妹子問,為啥呀?我該如何回復(fù)用戶?
每及此,你也許和我一樣,真的好想知道為什么會發(fā)生這樣的情況(偷笑:如果你早用 OneAPM 就不用這樣啦?。?。
馬上使用 OneAPM 性能監(jiān)控吧!輕松解決潛在 APP 性能問題!
光靠說是不行的,看看它有啥武器! OneAPM Android 產(chǎn)品功能 網(wǎng)絡(luò)性能剖析。輕松知道哪一個網(wǎng)絡(luò)訪問慢了?錯誤了?影響用戶體驗了? Crash 分析。通過詳細(xì)的上下文信息,很快復(fù)現(xiàn)用戶的操作以及當(dāng)時的環(huán)境,幫助您快速排查問題。 WebView 性能分析。通過內(nèi)嵌的探針方便知曉 WebView 的渲染,加載,使用過程中的問題。 ANR 監(jiān)控。無需添加任何代碼,讓是我們和厭惡的 Application Not Response 說拜拜! 以數(shù)據(jù)庫、CPU、內(nèi)存性能度量設(shè)備性能表現(xiàn)。 端到端的交互甘特圖,給予各個事件的性能可見性。 不同事件的性能區(qū)隔,方便快速定位性能優(yōu)化點。 識別設(shè)備類型(手機/平板、操作系統(tǒng)版本),分類設(shè)備性能。 自定義用戶信息。方便您描述具體用戶畫像。在用戶投訴之前輕松應(yīng)對。 ......更多功能等您探索?。?!
活動步驟
3分鐘快速集成,領(lǐng)取體驗獎?。。?
1.登陸 http://www.oneapm.com5 點擊登陸(沒有賬號請注冊一個)
2.選擇 Mi 進入,如下圖 switch.png 1331x821 171 KB
3.進入之后,點擊右上角的添加應(yīng)用
進入之后按照您所使用的編譯環(huán)境選擇安裝插件來集成即可(選安卓圖標(biāo)下的 ANT、eclipse、android studio、maven 中的一種即可)。 install.png 550x724 33.3 KB
4. 保證按照說明步驟集成后臺可以看見數(shù)據(jù)。
5. 在論壇回帖或者給 zhangxinyong@oneapm.com5 發(fā)郵件備案
凡反饋者前100名將獲得16GB U盤一個或者程序猿專屬茶具一套

郵件或者回帖發(fā)送反饋格式 :
標(biāo)題: 【OneAPM 安卓探針產(chǎn)品反饋】+***(描述具體問題)
正文:
QQ 號碼:(方便溝通聯(lián)系,并跟進獎品發(fā)放事宜)
OneAPM 注冊賬號:xxx (審核使用)
聯(lián)系人名:xxx
接入應(yīng)用名稱:xxx
是否上傳至 app 應(yīng)用商店:是/否 (選填,只作為終極大禮的評選標(biāo)準(zhǔn))
問題描述:(文字+截圖描述。務(wù)必配上需要反饋的 bug,或者產(chǎn)品需要改進的地方。沒有問題的,請把后臺有數(shù)據(jù)的截圖發(fā)一下)
特別說明:集成過程中有任何問題,請加入 OneAPM 粉絲4群(群號:485379471 )聯(lián)系群主獲取一對一指導(dǎo)!
活動進階(推薦完成)
除了按照活動步驟集成并反饋外,需要把您集成了 sdk 的 app 上傳至一家應(yīng)用商店。
應(yīng)用商店審核成功并上架之后,請您郵件至 zhangxinyong@oneapm.com5 ,格式如上面第5步。
完成之后,您將獲得以下額外獎勵!
1、愛奇藝包月會員
2、程序猿專屬T恤?。ㄓ衅渌麡邮娇蛇x) T恤1.png 541x550 115 KB
說明:可以集成至商用 app 中。如果您有自己業(yè)余的 app 或者找一些開源的 app 改一下。換換圖標(biāo)、包名、啟動界面也可以。
這么好的福利!請大家廣為擴散?。?!
擴散獎
如果您是A用戶成功集成了sdk,您將獲得如上所述的獎勵。
此外,您再邀請B用戶進來成功集成sdk,除B獲取上述應(yīng)有獎勵外,您將額外可以挑選上訴所有獎品做的任意一個獎品。
我們是誰
OneAPM 從2008年開始就踏進了性能分析領(lǐng)域。截至目前,積累了異常豐富的性能檢測、服務(wù)優(yōu)化方面的經(jīng)驗。OneAPM Mi 移動端產(chǎn)品主要提供面向安卓、IOS、ndk、html5 等提供性能檢測產(chǎn)品,
旨在提供 以真實用戶體驗為度量標(biāo)準(zhǔn)來進行 crash 分析,監(jiān)控網(wǎng)絡(luò)請求及網(wǎng)絡(luò)錯誤,從而提升用戶留存。
這次 OneAPM Mi 安卓團隊,不負(fù)眾望以全新的 SDK 架構(gòu)、插件化設(shè)計、低耦合的組織結(jié)構(gòu)為標(biāo)準(zhǔn)而設(shè)計的全新的探針(SDK)已經(jīng)開發(fā)并且內(nèi)測完成。因為這個版本承載了新的理念和
愿景,我們稱之為 3.0 版本。我們希望,通過這個版本給大家通過更加便捷的集成、更少的內(nèi)存、cpu 使用、更少的 SDK 體積、更加精準(zhǔn)的數(shù)據(jù)抓取,從而給大家提供更好的性能檢測服務(wù)!
Tips:
* 活動截止時間到2016年5月18日
* 活動專用 QQ 群是 OneAPM 安卓粉絲4群:485379471
* 關(guān)于本活動有其他疑問,歡迎發(fā)郵件至 zhangxinyong@oneapm.com,或在QQ群及帖子中留言:)


技術(shù)問答
2016-05-10 10:49:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
一、使用環(huán)境 1、windows64位操作系統(tǒng) 2、ADT為adt-bundle-windows-x86_64-20130917 3、NDK為android-ndk-r9b

二、配置生成頭文件.h
⒈首先,如圖所示,點擊External Tools Configurations...

⒉然后,如圖所示,點擊

⒊接下來,看圖操作



最后點擊Apply,然后 我們在一個android工程中新建一個class文件


三、配置build ndk,和上面類似,參考圖中配置即可


創(chuàng)建C文件

創(chuàng)建Android.mk文件

創(chuàng)建Application.mk文件

最后 加載so的庫文件 就可以把C語言的函數(shù)當(dāng)Java函數(shù)使用了


好了,上面就是是用eclipse快速開發(fā)JNI的方法了,你學(xué)會了嗎?
技術(shù)問答
2013-11-18 18:35:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
正式開始這個話題之前,先簡單介紹一下什么是NDK和JNI,部分內(nèi)容來自網(wǎng)絡(luò)
Android NDK 是什么,為什么我們要用 NDK ? Android NDK 是在 SDK 前面又加上了“原生”二字,即 Native Development Kit ,因此又被 Google 稱為“ NDK ”。眾所周知, Android 程序運行在 Dalvik 虛擬機中, NDK 允許用戶使用類似 C / C++ 之類的原生代碼語言執(zhí)行部分程序。NDK包括了: 從 C / C++ 生成原生代碼庫所需要的工具和 build files 。 將一致的原生庫嵌入可以在 Android 設(shè)備上部署的應(yīng)用程序包文件( application packages files ,即 .apk 文件)中。 支持所有未來 Android 平臺的一些列原生系統(tǒng)頭文件和庫
為何要用到 NDK ?概括來說主要分為以下幾種情況: 代碼的保護,由于 apk 的 java 層代碼很容易被反編譯,而 C/C++ 庫反匯難度較大。 在 NDK 中調(diào)用第三方 C/C++ 庫,因為大部分的開源庫都是用 C/C++ 代碼編寫的。 便于移植,用 C/C++ 寫的庫可以方便在其他的嵌入式平臺上再次使用。
Android JNI 是什么?和 NDK 是什么關(guān)系? Java Native Interface(JNI) 標(biāo)準(zhǔn)是 java 平臺的一部分,它允許 Java 代碼和其他語言寫的代碼進行交互。 JNI 是本地編程接口,它使得在 Java 虛擬機 (VM) 內(nèi)部運行的 Java 代碼能夠與用其它編程語言 ( 如 C 、 C++ 和匯編語言 ) 編寫的應(yīng)用程序和庫進行交互操作。
簡單來說,可以認(rèn)為 NDK 就是能夠方便快捷開發(fā) .so 文件的工具。 JNI 的過程比較復(fù)雜,生成 .so 需要大量操作,而 NDK 就是簡化了這個過程。 NDK 的異常會不會導(dǎo)致程序 Crash , NDK 的常見的有哪些類型異常?
NDK 編譯生成的 . so 文件作為程序的一部分,在運行發(fā)生異常時同樣會造成程序崩潰。不同于 Java 代碼異常造成的程序崩潰,在 NDK 的異常發(fā)生時,程序在 Android 設(shè)備上都會立即退出,即通常所說的閃退,而不會彈出“程序 xxx 無響應(yīng),是否立即關(guān)閉”之類的提示框。
NDK 是使用 C/C++ 來進行開發(fā)的,熟悉 C/C++ 的程序員都知道,指針和內(nèi)存管理是最重要也是最容易出問題的地方,稍有不慎就會遇到諸如內(nèi)存無效訪問、無效對象、內(nèi)存泄露、堆棧溢出等常見的問題,最后都是同一個結(jié)果:程序崩潰。例如我們常說的空指針錯誤,就是當(dāng)一個內(nèi)存指針被置為空( NULL )之后再次對其進行訪問;另外一個經(jīng)常出現(xiàn)的錯誤是,在程序的某個位置釋放了某個內(nèi)存空間,而后在程序的其他位置試圖訪問該內(nèi)存地址,這就會產(chǎn)生一個無效地址錯誤。常見的錯誤類型如下: 初始化錯誤 訪問錯誤 數(shù)組索引訪問越界 指針對象訪問越界 訪問空指針對象 訪問無效指針對象 迭代器訪問越界 內(nèi)存泄露 參數(shù)錯誤 堆棧溢出 類型轉(zhuǎn)換錯誤 數(shù)字除 0 錯誤 NDK錯誤發(fā)生時,我們能拿到什么信息?
利用 Android NDK 開發(fā)本地應(yīng)用的時候,幾乎所有的程序員都遇到過程序崩潰的問題,但它的崩潰會在 logcat 中打印一堆看起來類似天書的堆棧信息,讓人舉足無措。單靠添加一行行的打印信息來定位錯誤代碼做在的行數(shù),無疑是一件令人崩潰的事情。在網(wǎng)上搜索“ Android NDK 崩潰”,可以搜索到很多文章來介紹如何通過 Android 提供的工具來查找和定位 NDK 的錯誤,但大都晦澀難懂。下面以一個實際的例子來說明,首先生成一個錯誤,然后演示如何通過兩種不同的方法,來定位錯誤的函數(shù)名和代碼行。
首先,看我們在 hello-jni 程序的代碼中做了什么(有關(guān)如何創(chuàng)建或?qū)牍こ?此處略),看下圖:在 JNI_OnLoad() 的函數(shù)中,即 so 加載時,調(diào)用 willCrash() 函數(shù),而在 willCrash() 函數(shù)中, std::string 的這種賦值方法會產(chǎn)生一個空指針錯誤。這樣,在 hello-jni 程序加載時就會閃退。我們記一下這兩個行數(shù):在 61 行調(diào)用了 willCrash() 函數(shù);在 69 行發(fā)生了崩潰。
下面來看看發(fā)生崩潰(閃退)時系統(tǒng)打印的 logcat 日志: [plain] view plain copy *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** Build fingerprint: 'vivo/bbk89_cmcc_jb2/bbk89_cmcc_jb2:4.2.1/JOP40D/1372668680:user/test-keys' pid: 32607, tid: 32607, name: xample.hellojni >>> com.example.hellojni <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 r0 00000000 r1 beb123a8 r2 80808080 r3 00000000 r4 5d635f68 r5 5cdc3198 r6 41efcb18 r7 5d62df44 r8 4121b0c0 r9 00000001 sl 00000000 fp beb1238c ip 5d635f7c sp beb12380 lr 5d62ddec pc 400e7438 cpsr 60000010 backtrace: #00 pc 00023438 /system/lib/libc.so #01 pc 00004de8 /data/app-lib/com.example.hellojni-2/libhello-jni.so #02 pc 000056c8 /data/app-lib/com.example.hellojni-2/libhello-jni.so #03 pc 00004fb4 /data/app-lib/com.example.hellojni-2/libhello-jni.so #04 pc 00004f58 /data/app-lib/com.example.hellojni-2/libhello-jni.so #05 pc 000505b9 /system/lib/libdvm.so #06 pc 00068005 /system/lib/libdvm.so #07 pc 000278a0 /system/lib/libdvm.so #08 pc 0002b7fc /system/lib/libdvm.so #09 pc 00060fe1 /system/lib/libdvm.so #10 pc 0006100b /system/lib/libdvm.so #11 pc 0006c6eb /system/lib/libdvm.so #12 pc 00067a1f /system/lib/libdvm.so #13 pc 000278a0 /system/lib/libdvm.so #14 pc 0002b7fc /system/lib/libdvm.so #15 pc 00061307 /system/lib/libdvm.so #16 pc 0006912d /system/lib/libdvm.so #17 pc 000278a0 /system/lib/libdvm.so #18 pc 0002b7fc /system/lib/libdvm.so #19 pc 00060fe1 /system/lib/libdvm.so #20 pc 00049ff9 /system/lib/libdvm.so #21 pc 0004d419 /system/lib/libandroid_runtime.so #22 pc 0004e1bd /system/lib/libandroid_runtime.so #23 pc 00001d37 /system/bin/app_process #24 pc 0001bd98 /system/lib/libc.so #25 pc 00001904 /system/bin/app_process stack: beb12340 012153f8 beb12344 00054290 beb12348 00000035 beb1234c beb123c0 [stack] ……
如果你看過 logcat 打印的 NDK 錯誤時的日志就會知道,我省略了后面很多的內(nèi)容,很多人看到這么多密密麻麻的日志就已經(jīng)頭暈?zāi)X脹了,即使是很多資深的 Android 開發(fā)者,在面對 NDK 日志時也大都默默的選擇了無視。
“符號化”NDK錯誤信息的方法 其實,只要你細(xì)心的查看,再配合 Google 提供的工具,完全可以快速的準(zhǔn)確定位出錯的代碼位置,這個工作我們稱之為“符號化”。需要注意的是,如果要對 NDK 錯誤進行符號化的工作,需要保留編譯過程中產(chǎn)生的包含符號表的 so 文件,這些文件一般保存在 $PROJECT_PATH/obj/local/ 目錄下。 第一種方法: ndk-stack
這個命令行工具包含在 NDK 工具的安裝目錄,和 ndk-build 和其他一些常用的 NDK 命令放在一起,比如在我的電腦上,其位置是 /android-ndk-r9d/ndk-stack 。根據(jù) Google 官方文檔, NDK 從 r6 版本開始提供 ndk-stack 命令,如果你用的之前的版本,建議還是盡快升級至最新的版本。使用 ndk –stack 命令也有兩種方式 使用ndk-stack實時分析日志
在運行程序的同時,使用 adb 獲取 logcat 日志,并通過管道符輸出給 ndk-stack ,同時需要指定包含符號表的 so 文件位置;如果你的程序包含了多種 CPU 架構(gòu),在這里需求根據(jù)錯誤發(fā)生時的手機 CPU 類型,選擇不同的 CPU 架構(gòu)目錄,如: [plain] view plain copy adb shell logcat | ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
當(dāng)崩潰發(fā)生時,會得到如下的信息: [plain] view plain copy ********** Crash dump: ********** Build fingerprint: 'vivo/bbk89_cmcc_jb2/bbk89_cmcc_jb2:4.2.1/JOP40D/1372668680:user/test-keys' pid: 32607, tid: 32607, name: xample.hellojni >>> com.example.hellojni <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000 Stack frame #00 pc 00023438 /system/lib/libc.so (strlen+72) Stack frame #01 pc 00004de8 /data/app-lib/com.example.hellojni-2/libhello-jni.so (std::char_traits::length(char const*)+20): Routine std::char_traits::length(char const*) at /android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/char_traits.h:229 Stack frame #02 pc 000056c8 /data/app-lib/com.example.hellojni-2/libhello-jni.so (std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&)+44): Routine basic_string at /android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/_string.c:639 Stack frame #03 pc 00004fb4 /data/app-lib/com.example.hellojni-2/libhello-jni.so (willCrash()+68): Routine willCrash() at /home/testin/hello-jni/jni/hello-jni.cpp:69 Stack frame #04 pc 00004f58 /data/app-lib/com.example.hellojni-2/libhello-jni.so (JNI_OnLoad+20): Routine JNI_OnLoad at /home/testin/hello-jni/jni/hello-jni.cpp:61 Stack frame #05 pc 000505b9 /system/lib/libdvm.so (dvmLoadNativeCode(char const*, Object*, char**)+516) Stack frame #06 pc 00068005 /system/lib/libdvm.so Stack frame #07 pc 000278a0 /system/lib/libdvm.so Stack frame #08 pc 0002b7fc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+180) Stack frame #09 pc 00060fe1 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+272) ……(后面略)
我們重點看一下 #03 和 #04 ,這兩行都是在我們自己生成的 libhello-jni.so 中的報錯信息,那么會發(fā)現(xiàn)如下關(guān)鍵信息: [plain] view plain copy #03 (willCrash()+68): Routine willCrash() at /home/testin/hello-jni/jni/hello-jni.cpp:69 #04 (JNI_OnLoad+20): Routine JNI_OnLoad at /home/testin/hello-jni/jni/hello-jni.cpp:61
回想一下我們的代碼,在 JNI_OnLoad() 函數(shù)中(第 61 行),我們調(diào)用了 willCrash() 函數(shù);在 willCrash() 函數(shù)中(第 69 行),我們制造了一個錯誤。這些信息都被準(zhǔn)確無誤的提取了出來!是不是非常簡單? 先獲取日志,再使用ndk-stack分析
這種方法其實和上面的方法沒有什么大的區(qū)別,僅僅是 logcat 日志獲取的方式不同。可以在程序運行的過程中將 logcat 日志保存到一個文件,甚至可以在崩潰發(fā)生時,快速的將 logcat 日志保存起來,然后再進行分析,比上面的方法稍微靈活一點,而且日志可以留待以后繼續(xù)分析。 [plain] view plain copy adb shell logcat > 1.log ndk-stack -sym $PROJECT_PATH/obj/local/armeabi –dump 1.log 第二種方法:使用addr2line和objdump命令
這個方法適用于那些,不滿足于上述 ndk-stack 的簡單用法,而喜歡刨根問底的程序員們,這兩個方法可以揭示 ndk-stack 命令的工作原理是什么,盡管用起來稍微麻煩一點,但是可以滿足一下程序員的好奇心。
先簡單說一下這兩個命令,在絕大部分的 linux 發(fā)行版本中都能找到他們,如果你的操作系統(tǒng)是 linux ,而你測試手機使用的是 Intel x86 系列,那么你使用系統(tǒng)中自帶的命令就可以了。然而,如果僅僅是這樣,那么絕大多數(shù)人要絕望了,因為恰恰大部分開發(fā)者使用的是 Windows ,而手機很有可能是 armeabi 系列。
別急,在 NDK 中自帶了適用于各個操作系統(tǒng)和 CPU 架構(gòu)的工具鏈,其中就包含了這兩個命令,只不過名字稍有變化,你可以在 NDK 目錄的 toolchains 目錄下找到他們。以我的 Mac 電腦為例,如果我要找的是適用于 armeabi 架構(gòu)的工具,那么他們分別為 arm-linux-androideabi-addr2line 和 arm-linux-androideabi-objdump ;位置在下面目錄中,后續(xù)介紹中將省略此位置: [plain] view plain copy /Developer/android_sdk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/
假設(shè)你的電腦是 windows , CPU 架構(gòu)為 mips ,那么你要的工具可能包含在這個目錄中: [plain] view plain copy D:\ android-ndk-r9d\toolchains\mipsel-linux-android-4.8\prebuilt\windows-x86_64\bin\

好了言歸正傳,如何使用這兩個工具,下面具體介紹: 1. 找到日志中的關(guān)鍵函數(shù)指針
其實很簡單,就是找到 backtrace 信息中,屬于我們自己的 so 文件報錯的行。
首先要找到 backtrace 信息,有的手機會明確打印一行 backtrace (比如我們這次使用的手機),那么這一行下面的一系列以“ # 兩位數(shù)字 pc ”開頭的行就是 backtrace 信息了。有時可能有的手機并不會打印一行 backtrace ,那么只要找到一段以“ # 兩位數(shù)字 pc ”開頭的行,就可以了。
其次要找到屬于自己的 so 文件報錯的行,這就比較簡單了。找到這些行之后,記下這些行中的函數(shù)地址
2. 使用 addr2line 查找代碼位置 執(zhí)行如下的命令,多個指針地址可以在一個命令中帶入,以空格隔開即可 [plain] view plain copy arm-linux-androideabi-addr2line –e obj/local/armeabi/libhello-jni.so 00004de8 000056c8 00004fb4 00004f58
結(jié)果如下 [plain] view plain copy /android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/char_traits.h:229 /android-ndk-r9d/sources/cxx-stl/stlport/stlport/stl/_string.c:639 /WordSpaces/hello-jni/jni/hello-jni.cpp:69 /WordSpaces hello-jni/jni/hello-jni.cpp:6
從 addr2line 的結(jié)果就能看到,我們拿到了我們自己的錯誤代碼的調(diào)用關(guān)系和行數(shù),在 hello-jni.cpp 的 69 行和 61 行(另外兩行因為使用的是標(biāo)準(zhǔn)函數(shù),可以忽略掉),結(jié)果和 ndk-stack 是一致的,說明 ndk-stack 也是通過 addr2line 來獲取代碼位置的。
3. 使用 objdump 獲取函數(shù)信息
通過 addr2line 命令,其實我們已經(jīng)找到了我們代碼中出錯的位置,已經(jīng)可以幫助程序員定位問題所在了。但是,這個方法只能獲取代碼行數(shù),并沒有顯示函數(shù)信息,顯得不那么“完美”,對于追求極致的程序員來說,這當(dāng)然是不夠的。下面我們就演示怎么來定位函數(shù)信息。

使用如下命令導(dǎo)出函數(shù)表: [plain] view plain copy arm-linux-androideabi-objdump –S obj/local/armeabi/libhello-jni.so > hello.asm

在生成的 asm 文件中查找剛剛我們定位的兩個關(guān)鍵指針 00004fb4 和 00004f58


從這兩張圖可以清楚的看到(要注意的是,在不同的 NDK 版本和不同的操作系統(tǒng)中, asm 文件的格式不是完全相同,但都大同小異,請大家仔細(xì)比對),這兩個指針分別屬于 willCrash() 和 JNI_OnLoad() 函數(shù),再結(jié)合剛才 addr2line 的結(jié)果,那么這兩個地址分別對應(yīng)的信息就是: [plain] view plain copy 00004fb4: willCrash() /WordSpaces/hello-jni/jni/hello-jni.cpp:69 00004f58: JNI_OnLoad()/WordSpaces/hello-jni/jni/hello-jni.cpp:61
相當(dāng)完美,和 ndk-stack 得到的信息完全一致!
使用Testin崩潰分析服務(wù)定位NDK錯誤 以上提到的方法,只適合在開發(fā)測試期間,如果你的應(yīng)用或者游戲已經(jīng)發(fā)布上線,而用戶經(jīng)常反饋說崩潰、閃退,指望用戶幫你收集信息定位問題,幾乎是不可能的。這個時候,我們就需要用其他的手段來捕獲崩潰信息。
目前業(yè)界已經(jīng)有一些公司推出了崩潰信息收集的服務(wù),通過嵌入 SDK ,在程序發(fā)生崩潰時收集堆棧信息,發(fā)送到云服務(wù)平臺,從而幫助開發(fā)者定位錯誤信息。在這方面,處于領(lǐng)先地位的是國內(nèi)的 Testin 和國外的 crittercism ,其中 crittercism 需要付費,而且沒有專門的中國開發(fā)者支持,我們更推薦 Testin ,其崩潰分析服務(wù)是完全免費的。
Testin 從 1.4 版本開始支持 NDK 的崩潰分析,其最新版本已經(jīng)升級到 1.7 。當(dāng)程序發(fā)生 NDK 錯誤時,其內(nèi)嵌的 SDK 會收集程序在用戶手機上發(fā)生崩潰時的堆棧信息(主要就是上面我們通過 logcat 日志獲取到的函數(shù)指針)、設(shè)備信息、線程信息等等, SDK 將這些信息上報至 Testin 云服務(wù)平臺,只要登陸到Testin平臺,就可以看到所有用戶上報的崩潰信息,包括NDK;并且這些崩潰做過歸一化的處理,在不同系統(tǒng)和ROM的版本上打印的信息會略有不同,但是在Testin的網(wǎng)站上這些都做了很好的處理,避免了我們一些重復(fù)勞動。

上圖的紅框部分,就是從用戶手機上報的,我們自己的so中報錯的函數(shù)指針地址堆棧信息,就和我們開發(fā)時從 logcat 讀到的日志一樣,是一些晦澀難懂的指針地址, Testin 為 NDK 崩潰提供了符號化的功能,只要將我們編譯過程中產(chǎn)生的包含符號表的 so 文件上傳(上文我們提到過的 obj/local/ 目錄下的適用于各個 CPU 架構(gòu)的 so ),就可以自動將函數(shù)指針地址定位到函數(shù)名稱和代碼行數(shù)。符號化之后,看起來就和我們前面在本地測試的結(jié)果是一樣的了,一目了然。
而且使用這個功能還有一個好處:這些包含符號表的 so 文件,在每次我們自己編譯之后都會改變,很有可能我們剛剛發(fā)布一個新版本,這些目錄下的so就已經(jīng)變了,因為開發(fā)者會程序的修改程序;在這樣的情況下,即使我們拿到了崩潰時的堆棧信息,那也無法再進行符號化了。所以我們在編譯打包完成后記得備份我們的so文件。這時我們可以將這些文件上傳到 Testin 進行符號化的工作, Testin 會為我們保存和管理不同版本的 so 文件,確保信息不會丟失。來看一下符號化之后的顯示:
技術(shù)問答
2014-12-16 11:19:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 剛更新了Android Studio到2.0,但是編譯之前的項目發(fā)現(xiàn)JNI可以正常編譯,但頭文件等C文件無法關(guān)聯(lián)打開了,有木有遇到同樣問題的人啊。
技術(shù)問答
2016-04-08 16:47:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
想請教各位大神幾個問題:
1、關(guān)于Android 的NDK在android 應(yīng)用開發(fā)過程中能起到什么作用呢?
2、我現(xiàn)在只是知道android 有個 NDK 但是不太清楚如果我掌握了它能對我日常的開發(fā)有什么幫助?
3、在應(yīng)用開發(fā)過程中有哪些方面如果使用NDK 能起到更好的效果和作用?
4、如果想掌握NDK的話肯定得先學(xué)會C++,那C++我學(xué)到什么程度能搞定NDK呢?比如說,android用到的java就是屬于基礎(chǔ)部分,掌握了java基礎(chǔ)部分就算是基本可以做android了。
現(xiàn)在想學(xué)C++和NDK 但是又不太清楚學(xué)會了能做什么,在哪些方面用到它,希望大神們能指點一下,謝謝了!
技術(shù)問答
2016-03-23 14:13:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 裝完了后,似乎提示說俺的數(shù)據(jù)庫版本太低了,不會吧,俺在用mysql5.5啊,怎么會呢,況且你postfix還是幾年前的版本怎么會要求這么高呢,。高人能看下,這到底是腫么了嗎?
見圖
技術(shù)問答
2017-01-03 19:40:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> centos 6.4 中已禁止postfix的仇家 sendmail啟動了 但是執(zhí)行啟動postfix后,還是不能啟動postfix,查了下 [root @mail ~]# service postfix status master dead but pid file exists
象這種情況如何處理呢
技術(shù)問答
2017-01-03 13:17:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
配置如下:
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 smtpd_client_restrictions = permit_mynetworks
配置參數(shù)permit_mynetworks不是只能是客戶端ip是mynetworks的可以連接嗎?
怎么我配置好,重啟之后,我還是可以匿名登陸?
我是想配置個只是自己服務(wù)器發(fā)送郵件的就可以了,不需要外部連接smtp。
技術(shù)問答
2016-07-23 00:31:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
postfix搭建好了,用outlook可以正常發(fā)送mail給gmail,在gmail中也正常收到了。
可是用javamail發(fā)送就會出現(xiàn)下面的錯誤。
javax.mail.MessagingException: 501 Syntax: HELO hostname
另外,該段程序原來在windows下是好用的,不知道為什么在rhel5下就不好用了。
查了好久,有的說需要修改hosts文件:
xxx.xxx.xxx.xxx smtp.mydomain.com
試過了,無效。
有的說,直接把程序中的smtp.mydomain.com修改為IP也是試驗過了,還是無效。
還有其他的可能嗎?紅薯,oschina是怎么做的??? props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", hostName) Authenticator auth = new PopupAuthenticator(username, password); Session mailSession = Session.getInstance(props, auth); Transport transport = mailSession.getTransport("smtp"); transport.connect((String) props.get("mail.smtp.host"), username, password); transport.sendMessage(mimeMsg, mimeMsg .getRecipients(Message.RecipientType.TO)); transport.close(); static class PopupAuthenticator extends Authenticator { private String strUser; private String strPwd; public PopupAuthenticator(String user, String password) { this.strUser = user; this.strPwd = password; } protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(strUser, strPwd); } } 大家能幫忙看看怎么回事嗎?
好像不是postfix的問題,好像是linux服務(wù)器下跑javamail的問題。
web服務(wù)是resin
技術(shù)問答
2010-07-29 19:10:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
maillog里面可以取到送信失敗的信息么。
比如給一個不存在的郵箱(例:aXXX@b.c)送信。
技術(shù)問答
2016-07-14 15:43:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> Jul 4 11:33:25 localhost postfix/bounce[17157]: fatal: lock file defer A930712BD82: Resource temporarily unavailable
技術(shù)問答
2016-07-04 11:46:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') { $regip = empty($regip) ? $this->base->onlineip : $regip; $salt = substr(uniqid(rand()), -6); $password = md5(md5($password).$salt); $sqladd = $uid ? "uid='".intval($uid)."'," : ''; $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',"; $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'"); $uid = $this->db->insert_id(); $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'"); $this->db->query("INSERT INTO pre_common_regip set ip = '1.1.1.1',dateline = 2,count =2"); // BEGIN $this->db->query("INSERT INTO pre_common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'"); $this->db->query("INSERT INTO pre_common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'"); $this->db->query("INSERT INTO pre_common_member_profile SET uid='$uid'"); $this->db->query("INSERT INTO pre_common_member_field_forum SET uid='$uid'"); $this->db->query("INSERT INTO pre_common_member_field_home SET uid='$uid'"); $this->db->query("INSERT INTO pre_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'"); // END return $uid; }
從//BEGIN開始的sql不能執(zhí)行..
手動執(zhí)行pre_ 的SQL能成功,但是放到這里就不行了,discuz和UCenter在同一庫,同一用戶的
技術(shù)問答
2020-04-13 17:10:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
兩臺服務(wù)器,國內(nèi)和國外各一臺,國內(nèi)服務(wù)器上搭建有discuz論壇(nginx + discuz3.2.x + php5),用國外的服務(wù)器能夠正常訪問,由于一些原因需要使用國外的域名,所以做了一個反向代理,代理配置如下
國內(nèi)域名:bbs.guonei.com(正常)
國外域名: bbs.guowai.com
server {
listen 80;
server_name bbs.guowai.com;
location / {
proxy_pass https://bbs.guonei.com;
proxy_redirect https://bbs.guonei.com/ /;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header User-Agent;
#proxy_set_header Host $host;
proxy_set_header referer https://bbs.guowai.com;
}
}
用國外域名訪問時有如下問題:
1、瀏覽器地址欄會出現(xiàn)國內(nèi)的域名(bbs.guonei.com)
2、論壇的驗證碼無法正常顯示,顯示不出來。
請問有誰知道這是怎么回事嗎,怎么解決?
技術(shù)問答
2018-04-10 18:16:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
discuz 論壇里每天都有重復(fù)廣告,已在后臺添加詞語過濾但沒用,有壇主遇到過嗎?怎么解決?
感覺發(fā)廣告的是跳過了詞語過濾,但在本地測試同樣內(nèi)容和標(biāo)題的文章就發(fā)不出來,線上也測試發(fā)不出來,發(fā)廣告的就能發(fā)出來,奇怪了。暫時不用第三方插件,有沒有壇主遇到過,怎么解決的,求教。
技術(shù)問答
2019-05-22 14:23:06
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
[Tue Apr 16 12:21:38 2019] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Tue Apr 16 12:21:38 2019] [notice] Child 8164: Exit event signaled. Child process is ending.
[Tue Apr 16 12:21:39 2019] [notice] Child 8164: Released the start mutex
[Tue Apr 16 12:21:40 2019] [notice] Child 8164: All worker threads have exited.
[Tue Apr 16 12:21:40 2019] [notice] Child 8164: Child process is exiting
[Tue Apr 16 12:21:40 2019] [notice] Parent: Child process exited successfully.
[Tue Apr 16 12:22:11 2019] [notice] Apache/2.2.19 (Win32) PHP/5.2.17 configured -- resuming normal operations
[Tue Apr 16 12:22:11 2019] [notice] Server built: May 20 2011 17:39:35
[Tue Apr 16 12:22:11 2019] [notice] Parent: Created child process 7880
[Tue Apr 16 12:22:13 2019] [notice] Child 7880: Child process is running
[Tue Apr 16 12:22:13 2019] [notice] Child 7880: Acquired the start mutex.
[Tue Apr 16 12:22:13 2019] [notice] Child 7880: Starting 64 worker threads.
[Tue Apr 16 12:22:13 2019] [notice] Child 7880: Starting thread to listen on port 80.
[Tue Apr 16 12:26:20 2019] [notice] Parent: Received shutdown signal -- Shutting down the server.
[Tue Apr 16 12:26:20 2019] [notice] Child 7880: Exit event signaled. Child process is ending.
[Tue Apr 16 12:26:21 2019] [notice] Child 7880: Released the start mutex
[Tue Apr 16 12:26:22 2019] [notice] Child 7880: All worker threads have exited.
[Tue Apr 16 12:26:22 2019] [notice] Child 7880: Child process is exiting
[Tue Apr 16 12:26:22 2019] [notice] Parent: Child process exited successfully.
[Tue Apr 16 16:45:03 2019] [notice] Apache/2.2.19 (Win32) PHP/5.2.17 configured -- resuming normal operations
[Tue Apr 16 16:45:03 2019] [notice] Server built: May 20 2011 17:39:35
[Tue Apr 16 16:45:03 2019] [notice] Parent: Created child process 5816
[Tue Apr 16 16:45:05 2019] [notice] Child 5816: Child process is running
[Tue Apr 16 16:45:05 2019] [notice] Child 5816: Acquired the start mutex.
[Tue Apr 16 16:45:05 2019] [notice] Child 5816: Starting 64 worker threads.
[Tue Apr 16 16:45:05 2019] [notice] Child 5816: Starting thread to listen on port 80.
服務(wù)器上面跑著php5.2,discuz3.2,apache2.2,系統(tǒng)是windows2008
這幾天一直在找原因一直沒結(jié)果,有誰遇到過嗎?
技術(shù)問答
2019-04-17 08:58:00