barriers / 阅读 / 详情

android ndk 怎样调用第三方的so库文件

2023-07-16 10:29:15
共3条回复
马老四

问题描述:Android如何调用第三方SO库;

已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明;

已了解解决方案:

1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;

2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;

求解:

1.上面两种方案是否可行?不可行的话存在什么问题?

2.两种方案有什么区别?为什么网上大部都是用的第二种方案?

3.只有一个*.so文件,并提供了详细的接口说明,是否可在ANDROID中使用它?

首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。

如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。

一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。

1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。

2、因为第二种方法最灵活,各种情况都可以实现。

3、可以

看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的

是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;

不是的话就选第二种方案吧。

1、检查所需文件是否齐全

使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含

动态库API声明的头文件(.h)

2、封装原动态库

原动态库文件不包含jni接口需要的信息,所以我们需要对其进行封装,所以我

们的需求是:将libadd.so 里面的API封装成带jni接口的动态

3、编写库的封装函数libaddjni.c

根据前面生成的com_android_libjni_LibJavaHeader.h 文件,编写libaddjni.c,用

来生成libaddjni.so

Android中集成第三方软件包(.jar, .so)

Android中可能会用到第三方的软件包,这包括Java包.jar和Native包.so。jar包既可通过Eclipse开发环境集成,也可通过编译源码集成,看你的工作环境。

假定自己开发的程序为MyMaps,需要用到BaiduMaps的库,包括baidumapapi.jar和libBMapApiEngine_v1_3_1.so。

一、Eclipse中集成第三方jar包及.so动态库

MyMaps工程下创建目录libs以及libs/armeabi,把baidumapapi.jar放在的libs/目录下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。

Eclipse中把第三方jar包baidumapapi.jar打包到MyMaps的步骤:

1. 右击工程,选择Properties;

2. Java Build Path,选择Libraries;

3. Libraries页面点击右面按钮“Add Library…”;

4. 选择“User Library”,点击“Next”;

5. 点击“User Libraries”按钮;

6. 在弹出界面中,点击“New…”;

7. 输入“User library name”,点击“OK”确认;

8. 返回之后,选择刚刚创建的User library,右面点击“AddJARs”;

9. 选择MyMaps/libs/下的baidumapapi.jar;

10. 确认,返回。

这样,编译之后,该jar包就会被打进MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。

程序运行过程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,加载动态库时系统会从程序的该lib/目录下查找.so库。

二、源码中集成第三方集成jar包及.so动态库

Android源码中MyMaps放在packages/apps下。MyMaps下创建目录libs以及libs/armeabi,并把baidumapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。

2.1 修改Android.mk文件

Android.mk文件如下:

[plain] view plaincopy

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := libbaidumapapi

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := MyMaps

include $(BUILD_PACKAGE)

##################################################

include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libbaidumapapi:libs/baidumapapi.jar

LOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.so

LOCAL_MODULE_TAGS := optional

include $(BUILD_MULTI_PREBUILT)

# Use the following include to make our testapk.

include $(callall-makefiles-under,$(LOCAL_PATH))

1 集成jar包

LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。

编译用BUILD_MULTI_PREBUILT。

2 集成.so动态库

LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。

编译拷贝用BUILD_MULTI_PREBUILT。

2.2 加入到GRANDFATHERED_USER_MODULES

在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中

[plain] view plaincopy

GRANDFATHERED_USER_MODULES +=

libBMapApiEngine_v1_3_1

user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。

2.3 编译结果

MyMaps.apk编译生成在out/target/product/<YourProduct>/system/app/下;

libBMapApiEngine_v1_3_1.so放在out/target/product/<YourProduct>/system/lib/下,这也是系统加载动态库时搜索的路径。

慧慧

android ndk调用第三方的so库文件的步骤如下:

1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;

2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;

gitcloud

用cygwin在win7下编译

首先是jni目录的结构

Android.mk文件内容

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES :=

test.c

LOCAL_SHARED_LIBRARIES := point xml iconv

LOCAL_LDLIBS := -llog

LOCAL_MODULE:=test

include $(BUILD_EXECUTABLE)

include $(LOCAL_PATH)/prebuilt/Android.mk

prebuild目录

include目录就是用到的.h文件

xml目录是依赖的libxml.so库文件

Android.mk内容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := point

LOCAL_SRC_FILES := libpoint.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(LOCAL_PATH)/xml/Android.mk

xml目录

到这里基本就能看出规律了,

这里的Android.mk内容和上层的基本相同,如下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := xml

LOCAL_SRC_FILES := libxml.so

include $(PREBUILT_SHARED_LIBRARY)

include $(LOCAL_PATH)/iconv/Android.mk

#libxml.so libiconv.so

iconv目录:

Android.mk内容

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := iconv

LOCAL_SRC_FILES := libiconv.so

include $(PREBUILT_SHARED_LIBRARY)

#libxml.so libiconv.so

有上边可以看到,依赖无非就是一层层的加上去。

在编译的过程,可能遇到如下的错误

可以看到是权限错误(permission dendied),只要找到相关目录,chmod即可

相关推荐

“Clear Path”是什么意思?

应该是:挡拆战术。篮球中的基本进攻战术之一,进攻队员给持球的队友作掩护,英语叫"set a pick",然后掩护队员向...clear If I ever should fall I could count on you with no fear...path I...
2023-07-16 04:57:302

篮球罚球分几种?

罚球就只是罚球,但是看是什么犯规决定罚几个。
2023-07-16 04:57:3912

to clear the path(怎么理解?), your 18-year-old should put two decisions in writing.

cleartheway:tomakeitpossibleoreasierforsomeoneorsomethingtofollow,让某事变可能或者使它简化clearthe(a)path:tomake(awayorclearing)byremovingobstructions,消除路障使道路畅通(不知道还有没有别的象征意思.....)
2023-07-16 04:58:031

如何处理惠普3030打印机显示printer jam. clear paper path问题

卡纸,看下定影处,需要请加我扣扣
2023-07-16 04:58:134

英语翻译

【手工译文】 1.拿破仑畅通无阻抵达莫斯科,但他胜利攻占的只是一座空城。 2.在斯大林格勒战役中的失利,使整个战争局面转为对希特勒不利。 3.您车里的传感器通过接收轨道运行卫星发来的无线电信号,可以精确地确定任一时间您的车子所处的位置并预先警告哪里有交通堵塞。 4.当我们注视着世界级音乐大师或是顶级运动员时,我们不会看到他们为达到如此辉煌成就所付出的多年辛苦准备。 5.我有一种感觉,就是现在所发生的事不仅仅关系到国家的命运。
2023-07-16 04:58:314

我的打印机也出现你说的那种情况,显示clear paper path,要怎么弄,我QQ1165307810

clear paper path是清除纸张通道的意思。你的打印机卡纸了,有碎纸没有清理干净。建议将硒鼓、墨盒都取出来清洁,检查进纸口、出纸口位置是否有碎纸。将残留碎纸清理干净即可
2023-07-16 04:58:381

和唯一的一个朋友绝交了,删除了他所有的联系方式。从此我一个好朋友都没有了,感觉有点悲催

我们交个朋友吧. 和我说说
2023-07-16 04:58:481

为什么我一关IE,就会出来这个提示呀??是怎么回事,大侠帮帮小弟吧,这要怎么才能解决好呢??

你用得xp是什么版本的?ie是什么版本的,如果ie是6.0的你试一下升级到IE7.0看看。如果你不喜欢ie7.0你可以试验一下别的浏览器
2023-07-16 04:59:042

hp3020打印机出现Printer jam clear paper path是什么原因

你好!卡纸了,纸张通道有纸卡在打印机里了,清理出来后重启打印机就行了。我的回答你还满意吗~~
2023-07-16 04:59:131

求matlab大神给看看这段程序的第五行还有三个for循环结构分别是什么意思?小白啥都不懂,求助啊啊啊!

酸巴拉几的哪个舔过嘛
2023-07-16 04:59:392

vb 如何读取某目录下所有文件及子文件夹

首先点击 工程——引用 勾选 microsoft scripting runtime 添加一个cmd按钮和 一个listbox,复制以下代码 Private Sub Command1_Click()Findfolder "f:" "设置搜索路径End SubPrivate Sub Findfolder(ByVal mypath As String)Dim fso As New FileSystemObjectDim myfolder As FolderDim Itemmypath = IIf(Right(mypath, 1) = "", mypath, mypath & "")Set myfolder = fso.GetFolder(mypath)If myfolder.Files.Count > 0 ThenFor Each Item In myfolder.FilesList1.AddItem fso.GetBaseName(Item)DoEventsNextEnd IfIf myfolder.SubFolders.Count > 0 ThenFor Each Item In myfolder.SubFoldersList1.AddItem fso.GetBaseName(Item) "只获取文件夹名称,注意:如果文件夹名称包括若干个"."的话,只能获取最后一个点前面的字符Call Findfolder(Item) "比如文件夹名为“11.22.33”那么读取出来就是"11.22"DoEventsNextEnd IfEnd Sub
2023-07-16 04:59:462

明白的英文是什么

  你知道吗?一起来学习一下吧!    明白的英文: clear    明白的英文: obvious   同义词辨析:   apparent, obvious, evident, clear, plain, distinct, definite, manifest   这些形容词均含"清楚的,明白的,明显的"之意。   apparent :强调显而易见或一想便知。这个词从动词appear派生而来,故有时含有表面如此而事实上未必的意味。   obvious :语气较强,指极为明显,有目共睹,无需说明和论证。   evident :指根据事实成为显然的。   clear :普通用词,侧重清楚明白。   plain :普通用词,含义与clear很接近,可通用,但plain着重简单明了,不复杂。   distinct :较正式用词,指轮廓的清楚或定义、含义的明确,不会弄错。   definite :语气肯定,着重明白无误,无可怀疑。   manifest :语义较强,书面用词,强调一目了然,暗示不要任何推论就一清二楚。   明白的英文例句:   1. It was clear Cohen didn"t understand what Millard was driving at.   看得出科恩并不明白米勒德想说什么。   2. The rabbis try to steer clear of political questions.   拉比们努力避开政治问题。   3. Dig over any ground that is clear of crops and plants.   把没种庄稼和植物的土地都深翻一遍。   4. Stewart was trying to clear a path for the stretcher.   斯图尔特在努力给担架开路。   5. It seems clear that he has no reasonable alternative.   他没有其他合适的选择,这一点似乎很清楚。   6. It was not yet clear how the rudder had sheared off.   还不清楚船舵是如何断裂的。   7. Our therapists will show you how to clear your mind of worries.   我们的治疗师会教你如何消除心中的忧虑。   8. Whatever its obscurities, the poem was clear on at least one count.   这首诗再怎么晦涩,至少有一点是清楚的。   9. It is really not clear just why he became a Socialist.   他为何成为社会党人的确切原因实际上还不清楚。   10. They made it clear who is now running the show.   他们清楚地表明了现在是谁在掌控一切。   11. After shampooing, always rinse the hair several times in clear water.   每次用完洗发剂后都要用清水将头发冲洗几次。   12. Interestingly, it is not clear which solution the prime minister favors.   耐人寻味的是,现在还不清楚首相支援哪个解决方案。   13. My own view is absolutely clear. What I did was right.   我自己的观点非常清楚。我做的事是正确的。   14. It is quite clear that we were firing in self defence.   事实很清楚,我们开枪是出于自卫。   15. People use scientific terms with no clear idea of their meaning.   人们使用科学术语,但并非很清楚其含义。   1. The ideological divisions between the parties aren"t always obvious.   政党之间的意识形态界线并不总是泾渭分明的。   2. She persevered in her idea despite obvious objections raised by friends.   虽然朋友们明确反对,她还是坚持己见。   3. It"s obvious that you need more time to think.   显然你需要更多时间来思考。   4. She"s made it obvious that she"s appalled by me.   她坦言被我吓著了。   5. As an exercise in stating the obvious, this could scarcely be faulted.   这说的都是些显而易见的事情,几乎不可能出错。   6. This is an obvious sop to the large Irish-American audience.   这明显是讨好广大爱尔兰裔美国观众的一种手段。   7. There are obvious distinctions between the two wine-making areas.   两个酿酒地区之间有着显著的差别。   8. Troops were displaying an obvious reluctance to get involved in quashing demonstrations.   部队显然并不愿意参与镇压 *** *** 。   9. Keith hoped the obvious sarca *** would have its intended effect.   基思希望这一明显的讽刺能达到预期的效果。   10. It became obvious that all her plaints were in vain.   很明显她所有的抱怨都是白费口舌。   11. Grammatical errors are always obvious to me, spelling mistakes stand out.   语法错误对我来说总是非常明显,而拼写错误也很显眼。   12. Haig took obvious delight in proving his critics wrong.   黑格显然以证明他的批评者是错误的为乐。   13. Well, it"s obvious, ain"t it?   嗯,这很明显,不是吗?   14. He made his displeasure patently obvious.   他明显地表示了不悦。   15. It"s obvious why.   原因很明显.
2023-07-16 04:59:531

帮忙用VB做程序,功能:将目录下图片以1-1,1-2,1-3,2-1,2-2,2-3,3-1……的顺序重命名

"在工程-部件中,将Microsoft Common Dialog Control 6.0选中,加入一个CommonDialog控件,命名为:Comid"窗体上加一个标签,命名Labx,另添加一个按钮,然后将此代码复制到代码窗口。Private Sub Command1_Click()Dim I As Integer, IntTemp2 As IntegerDim strOpenFileName As StringDim StrTemp1 As String, StrTemp2 As String, StrTemp3 As String, StrTxtFile As StringDim S As String, tS As StringDim TxtDir() As StringReDim TxtDir(1000)On Error Resume NextLx:Comid.CancelError = TrueComid.DialogTitle = "指定要改名的JPG文件"Comid.Filter = "JPG文件(*.JPG)|*.JPG|所有文件(*.*)|*.*"Comid.InitDir = App.Path & "报盘"Comid.ShowOpenIf Err Or Comid.FileName = "" Then IntTemp2 = MsgBox("你要停止更改JPG文件名吗?", vbYesNo) If IntTemp2 <> 6 Then GoTo Lx Else MsgBox "程序将结束。" End End IfElse StrTxtFile = Comid.FileNameEnd IfDo IntTemp1 = 1 IntTemp1 = InStr(IntTemp2, StrTxtFile, "") If IntTemp1 = 0 Then Exit Do IntTemp2 = IntTemp1 + 1LoopStrDir = Mid(StrTxtFile, 1, IntTemp2 - 1)tS = Dir(StrDir & "*.JPG", vbHidden Or vbNormal Or vbReadOnly)I = 0Do While tS <> ""TxtDir(I) = tSI = I + 1tS = DirLoopReDim Preserve TxtDir(I - 1)I = 0For Each TxtFiles In TxtDirStrTxtFile = StrDir & TxtFiles DoEvents Labx.Caption = "正在处理: " & TxtFiles & "…" FileCopy StrTxtFile, (Int(I / 3) + 1) & "-" & ((I + 2) Mod 3) + 1 & ".JPG" I = I + 1 Kill StrTxtFileNextMsgBox "文件名修改完成!"EndEnd Sub 可参阅我的一篇博客:http://hi.baidu.com/zgmg/blog/item/194457cfa974de31f9dc615d.html
2023-07-16 05:00:001

nba比赛规则全称是什么?

就是美国职业联赛规则,不仅包括比赛,从球开始到人到器材等等
2023-07-16 05:00:142

vb 获得一个文件夹下所有子文件夹名,并全部添加到组合框里,只要文件名,不要全部路径

添加一个Dirlistbox,Textbox,一个按钮,一个组合框...按钮的单击事件如下Private Sub Command1_Click()Dim i As IntegerDim b As IntegerDim a As Stringa = Text1.TextDir1.Path = ab = Len(a)Combo1.ClearFor i = 0 To Dir1.ListCount - 1Combo1.AddItem (Mid(Dir1.List(i), b + 1))NextEnd Sub运行时候,在TextBox里输入文件路径,如 C:windows 这里路径后面把""要加上,然后,单击按钮,再查看组合框,就可以看到windows目录下了。。。以上程序在我的机子(XP,SP2版,VB6.0企业版)上测试通过
2023-07-16 05:00:281

请问如何利用VBA将Excel表格内容按照要求分割为若干txt文件?

其实就是一个拆分代码
2023-07-16 05:00:383

用了无惧上传类asp通用的excel 导入Access数据库程序,这个用了以后发现不能覆盖以前有的字段

问题不在于无惧上传类的源文件,要看数据库连接和处理的代码如何。
2023-07-16 05:00:452

扫描机出现please clear the paper path and rescan 是怎么回

please clear the paper path and rescan请清晰的研究路径与扫描please clear the paper path and rescan请清晰的研究路径与扫描please clear the paper path and rescan请清晰的研究路径与扫描
2023-07-16 05:01:061

我的世界NPC怎么让它打生物

不能设置
2023-07-16 05:01:134

She is scraping the path clear of snow.这是什么句子结构啊?后面的clear of snow 做什么成分?谢了

刘毅词汇10000学习笔记 lesson 4中的句子clear of snow 做状语修饰scraping,表示scraping的内容,类似的句子The children are scraping holes in the sand。比较好理解in the sand也是状语
2023-07-16 05:01:233

HPLasevM1005MFP老出现Opendooerandclearjan,janinprintpaperpath啥原因,怎么处理

您好,感谢您选择惠普产品。Opendooerandclearjan,janinprintpaperpath是提示您打印卡纸了,提示您清除卡纸。一般卡纸位置如下:I:进纸盒II:取出硒鼓,检查硒鼓下面是否有卡纸III:出纸盒位置也可以下载手册(鼠标右键另存即可下载),http://h20566.www2.hp.com/portal/site/hpsc/template.PAGE/public/psi/manualsResults/?sp4ts.oid=1839458&spf_p.tpst=psiContentResults&spf_p.prp_psiContentResults=wsrp-navigationalState%3Daction%253Dmanualslist%257Ccontentid%253DUser-Guide-%252528how-to-use%252529%257Clang%253Dzh_CN&javax.portlet.begCacheTok=com.vignette.cachetoken&javax.portlet.endCacheTok=com.vignette.cachetoken按照手册中问题解决章节中排除卡纸的详细截图,把机器内部所有卡纸取出,如果没取完整,就可能导致连续卡纸的。在保证机器内部没有卡纸情况下,打印或者复印如果还卡纸,要观察卡纸的位置1如果卡纸位置不固定,一般都是纸张自身导致,更换80g的标准普通打印纸测试2如果卡纸位置固定,观察在什么地方a如果在硒鼓下面,更换原厂硒鼓测试b如果是其他位置,可能是这个部分硬件有问题,需要联系当地维修中心,下面是维修中心查询链接:http://www8.hp.com/cn/zh/support-drivers/esupport/ascpps.html如果以上信息可以帮您解决问题,建议采纳,方便后来客户解决相同的问题。如果问题没有得到解决,建议继续追问,我们收到以后会针对您的问题,继续帮您解答。
2023-07-16 05:01:311

wpf中datagrid控件选定一行,写了一个删除按钮,点击按钮应该怎样删除这行?

d.Row="6" Name="dg" AutoGenerateColumns="False" Hyperlink.Click="DataGridHyperlinkColumn_Click"> <DataGrid.Columns> <DataGridHyperlinkColumn Header="点击链接" Binding="" ></DataGridHyperlinkColumn> </DataGrid.Columns> </DataGrid> private void DataGridHyperlinkColumn_Click(object sender, RoutedEventArgs e) { var dg = sender as DataGrid; var row = dg.SelectedItem as Pages; if(row !=null) row.WindowEnty.Show(); }pages辅助类: public class Pages { public Window WindowEnty public int Title }定义datagrid的source: var demo = new WDemo(); var list2 = new List<Pages> }; dg.ItemsSource = list2;
2023-07-16 05:01:444

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam

卡纸了,仔细检查
2023-07-16 05:01:542

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam是怎么解决的呀

最有效的解决卡纸的方法是:打开打印机设备的盖子,用手慢慢将纸张拖出来就可以了。 如果没有卡纸,更简单了,和我那台一样,你把盖子打开,在关上就可以了··实在不行就关掉再重启·或者你的纸还有一点点在里边希望帮到你,不懂继续追问
2023-07-16 05:02:032

asp.net导出excel部署后无法下载的问题

尝试把临时文件夹放在WebSite 之外
2023-07-16 05:02:102

关于vb OleLoadPicturePath 的一些问题

那是全局唯一标识符(Globally Unique Identifier),上述Data合起来就是{7BF80980-BF32-101A-8BBB-00AA00300CAB}熟悉注册表的会觉得很眼熟,是的,在注册表的HKEY_CLASSES_ROOTInterface中有很多这样的字串,它们是用来唯一标识各种接口的,{7BF80980-BF32-101A-8BBB-00AA00300CAB}是IPicture数据结构的唯一标识符,除此之外,还有{7BF80981-BF32-101A-8BBB-00AA00300CAB}则是Picture数据结构的唯一标识符,所以如果把Data1赋值为&H7BF80981程序也是可以运行,但是如果改为其他就不行了。
2023-07-16 05:02:341

Perhaps we need to clear away these books to make ______ for our new students.

21.D room表示空间 22.B 表示被动而且是三人称单数 23.A, FEEL LIKE后面一般接动名词,不接不定式 24.A have access to sth表示有权利做某事,有方法做某事。 25.B 动名词做伴随状语,而且不是指过去,所以不要用完成时态。
2023-07-16 05:02:501

djstl算法?

定义  Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表的方式,这里均采用永久和临时标号的方式。注意该算法要求图中不存在负权边。问题描述  在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。(单源最短路径)编辑本段迪杰斯特拉算法  迪杰斯特拉(Dijkstra)算法思想按路径长度递增次序产生最短路径算法: 把V分成两组: (1)S:已求出最短路径的顶点的集合 (2)V-S=T:尚未确定最短路径的顶点集合 将T中顶点按最短路径递增的次序加入到S中, 保证:(1)从源点V0到S中各顶点的最短路径长度都不大于 从V0到T中任何顶点的最短路径长度 (2)每个顶点对应一个距离值 S中顶点:从V0到此顶点的最短路径长度 T中顶点:从V0到此顶点的只包括S中顶点作中间 顶点的最短路径长度 依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的 直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和 (反证法可证) 求最短路径步骤算法步骤如下: 1. 初使时令 S={V0},T={其余顶点},T中顶点对应的距离值 若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值 若不存在<V0,Vi>,d(V0,Vi)为∝ 2. 从T中选取一个其距离值为最小的顶点W且不在S中,加入S 3. 对S中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的 距离值缩短,则修改此距离值 重复上述步骤2、3,直到S中包含所有顶点,即W=Vi为止编辑本段迪杰斯特拉算法的原理  首先,引进一个辅助向量D,它的每个分量D表示当前所找到的从始点v到每个终点vi的最短路径的长度。如D[3]=2表示从始点v到终点3的路径相对最小长度为2。这里强调相对就是说在算法过程中D的值是在不断逼近最终结果但在过程中不一定就等于最短路径长度。它的初始状态为:若从v到vi有弧,则D为弧上的权值;否则置D为∞。显然,长度为 D[j]=Min{D | vi∈V} 的路径就是从v出发的长度最短的一条最短路径。此路径为(v,vj)。 那么,下一条长度次短的最短路径是哪一条呢?假设该次短路径的终点是vk,则可想而知,这条路径或者是(v,vk),或者是(v,vj,vk)。它的长度或者是从v到vk的弧上的权值,或者是D[j]和从vj到vk的弧上的权值之和。 一般情况下,假设S为已求得最短路径的终点的集合,则可证明:下一条最短路径(设其终点为X)或者是弧(v,x),或者是中间只经过S中的顶点而最后到达顶点X的路径。因此,下一条长度次短的最短路径的长度必是D[j]=Min{D | vi∈V-S} 其中,D或者是弧(v,vi)上的权值,或者是D[k](vk∈S)和弧(vk,vi)上的权值之和。 迪杰斯特拉算法描述如下: 1)arcs表示弧上的权值。若不存在,则置arcs为∞(在本程序中为MAXCOST)。S为已找到从v出发的最短路径的终点的集合,初始状态为空集。那么,从v出发到图上其余各顶点vi可能达到的最短路径长度的初值为D=arcs[Locate Vex(G,v),i] vi∈V 2)选择vj,使得D[j]=Min{D | vi∈V-S} 3)修改从v出发到集合V-S上任一顶点vk可达的最短路径长度。编辑本段迪杰斯特拉算法C#程序  public class Edge { public string StartNodeID ; public string EndNodeID ; public double Weight ; //权值,代价 } 节点则抽象成Node类,一个节点上挂着以此节点作为起点的“出边”表。 public class Node { private string iD ; private ArrayList edgeList ;//Edge的集合--出边表 public Node(string id ) { this.iD = id ; this.edgeList = new ArrayList() ; } property#region property public string ID { get { return this.iD ; } } public ArrayList EdgeList { get { return this.edgeList ; } } #endregion } 在计算的过程中,我们需要记录到达每一个节点权值最小的路径,这个抽象可以用PassedPath类来表示: /// <summary> /// PassedPath 用于缓存计算过程中的到达某个节点的权值最小的路径 /// </summary> public class PassedPath { private string curNodeID ; private bool beProcessed ; //是否已被处理 private double weight ; //累积的权值 private ArrayList passedIDList ; //路径 public PassedPath(string ID) { this.curNodeID = ID ; this.weight = double.MaxValue ; this.passedIDList = new ArrayList() ; this.beProcessed = false ; } #region property public bool BeProcessed { get { return this.beProcessed ; } set { this.beProcessed = value ; } } public string CurNodeID { get { return this.curNodeID ; } } public double Weight { get { return this.weight ; } set { this.weight = value ; } } public ArrayList PassedIDList { get { return this.passedIDList ; } } #endregion } 另外,还需要一个表PlanCourse来记录规划的中间结果,即它管理了每一个节点的PassedPath。 /// <summary> /// PlanCourse 缓存从源节点到其它任一节点的最小权值路径=》路径表 /// </summary> public class PlanCourse { private Hashtable htPassedPath ; #region ctor public PlanCourse(ArrayList nodeList ,string originID) { this.htPassedPath = new Hashtable() ; Node originNode = null ; foreach(Node node in nodeList) { if(node.ID == originID) { originNode = node ; } else { PassedPath pPath = new PassedPath(node.ID) ; this.htPassedPath.Add(node.ID ,pPath) ; } } if(originNode == null) { throw new Exception("The origin node is not exist !") ; } this.InitializeWeight(originNode) ; } private void InitializeWeight(Node originNode) { if((originNode.EdgeList == null) ||(originNode.EdgeList.Count == 0)) { return ; } foreach(Edge edge in originNode.EdgeList) { PassedPath pPath = this[edge.EndNodeID] ; if(pPath == null) { continue ; } pPath.PassedIDList.Add(originNode.ID) ; pPath.Weight = edge.Weight ; } } #endregion public PassedPath this[string nodeID] { get { return (PassedPath)this.htPassedPath[nodeID] ; } } } 在所有的基础构建好后,路径规划算法就很容易实施了,该算法主要步骤如下: (1)用一张表(PlanCourse)记录源点到任何其它一节点的最小权值,初始化这张表时,如果源点能直通某节点,则权值设为对应的边的权,否则设为double.MaxValue。 (2)选取没有被处理并且当前累积权值最小的节点TargetNode,用其边的可达性来更新到达其它节点的路径和权值(如果其它节点 经此节点后权值变小则更新,否则不更新),然后标记TargetNode为已处理。 (3)重复(2),直至所有的可达节点都被处理一遍。 (4)从PlanCourse表中获取目的点的PassedPath,即为结果。 下面就来看上述步骤的实现,该实现被封装在RoutePlanner类中: /// <summary> /// RoutePlanner 提供图算法中常用的路径规划功能。 /// 2005.09.06 /// </summary> public class RoutePlanner { public RoutePlanner() { } #region Paln //获取权值最小的路径 public RoutePlanResult Paln(ArrayList nodeList ,string originID ,string destID) { PlanCourse planCourse = new PlanCourse(nodeList ,originID) ; Node curNode = this.GetMinWeightRudeNode(planCourse ,nodeList ,originID) ; #region 计算过程 while(curNode != null) { PassedPath curPath = planCourse[curNode.ID] ; foreach(Edge edge in curNode.EdgeList) { PassedPath targetPath = planCourse[edge.EndNodeID] ; double tempWeight = curPath.Weight + edge.Weight ; if(tempWeight < targetPath.Weight) { targetPath.Weight = tempWeight ; targetPath.PassedIDList.Clear() ; for(int i=0 ;i<curPath.PassedIDList.Count ;i++) { targetPath.PassedIDList.Add(curPath.PassedIDList.ToString()) ; } targetPath.PassedIDList.Add(curNode.ID) ; } } //标志为已处理 planCourse[curNode.ID].BeProcessed = true ; //获取下一个未处理节点 curNode = this.GetMinWeightRudeNode(planCourse ,nodeList ,originID) ; } #endregion //表示规划结束 return this.GetResult(planCourse ,destID) ; } #endregion #region private method #region GetResult //从PlanCourse表中取出目标节点的PassedPath,这个PassedPath即是规划结果 private RoutePlanResult GetResult(PlanCourse planCourse ,string destID) { PassedPath pPath = planCourse[destID] ; if(pPath.Weight == int.MaxValue) { RoutePlanResult result1 = new RoutePlanResult(null ,int.MaxValue) ; return result1 ; } string[] passedNodeIDs = new string[pPath.PassedIDList.Count] ; for(int i=0 ;i<passedNodeIDs.Length ;i++) { passedNodeIDs = pPath.PassedIDList.ToString() ; } RoutePlanResult result = new RoutePlanResult(passedNodeIDs ,pPath.Weight) ; return result ; } #endregion #region GetMinWeightRudeNode //从PlanCourse取出一个当前累积权值最小,并且没有被处理过的节点 private Node GetMinWeightRudeNode(PlanCourse planCourse ,ArrayList nodeList ,string originID) { double weight = double.MaxValue ; Node destNode = null ; foreach(Node node in nodeList) { if(node.ID == originID) { continue ; } PassedPath pPath = planCourse[node.ID] ; if(pPath.BeProcessed) { continue ; } if(pPath.Weight < weight) { weight = pPath.Weight ; destNode = node ; } } return destNode ; } #endregion #endregion }编辑本段迪杰斯特拉算法pascal程序  type bool=array[1..10]of boolean; arr=array[0..10]of integer; var a:array[1..10,1..10]of integer; //存储图的邻接数组,无边为10000 c,d,e:arr; //c为最短路径数值,d为各点前趋, t:bool; //e:路径,t为辅助数组 i,j,n,m:integer; inf,outf:text; //////////////////////////////////////////////////////////////////////////////// procedure init; //不同题目邻接数组建立方式不一样 begin assign(inf,"dijkstra.in"); assign(outf,"dijkstra.out"); reset(inf); rewrite(outf); read(inf,n); for i:=1 to n do for j:=1 to n do begin read(inf,a[i,j]); if a[i,j]=0 then a[i,j]:=10000; end; end; //////////////////////////////////////////////////////////////////////////////// procedure dijkstra(qi:integer; t:bool; var c{,d}:arr); //qi起点,{}中为求路径部 var i,j,k,min:integer; //分,不需求路径时可以不要 begin //t数组一般在调用前初始 t[qi]:=true; //化成false,也可将部分点 {for i:=1 to n do d[i]:=qi; d[qi]:=0; } //初始化成true以回避这些点 for i:=1 to n do c[i]:=a[qi,i]; for i:=1 to n-1 do begin min:=10001; for j:=1 to n do if (c[j]<min)and(not(t[j])) then begin k:=j; min:=c[j];end; t[k]:=true; for j:=1 to n do if (c[k]+a[k,j]<c[j])and(not(t[j])) then begin c[j]:=c[k]+a[k,j]; {d[j]:=k;} end; end; end; //////////////////////////////////////////////////////////////////////////////// procedure make(zh:integer; d:arr; var e:arr); //生成路径,e[0]保存路径 var i,j,k:integer; //上的节点个数 begin i:=0; while d[zh]<>0 do begin inc(i);e[i]:=zh;zh:=d[zh]; end; inc(i);e[i]:=qi; e[0]:=I; end; 主程序调用:求最短路径长度:初始化t,然后dijkstra(qi,t,c,d) 求路径:make(m,d,e) ,m是终点编辑本段Dijkstra算法的堆优化(PASCAL实现)  一、思考我们可以发现,在实现步骤时,效率较低(需要O(n),使总复杂度达到O(n^2)。对此可以考虑用堆这种数据结构进行优化,使此步骤复杂度降为O(log(n))(总复杂度降为O(n log(n))。 二、实现1. 将与源点相连的点加入堆,并调整堆。2. 选出堆顶元素u(即代价最小的元素),从堆中删除,并对堆进行调整。3. 处理与u相邻的,未被访问过的,满足三角不等式的顶点1):若该点在堆里,更新距离,并调整该元素在堆中的位置。2):若该点不在堆里,加入堆,更新堆。4. 若取到的u为终点,结束算法;否则重复步骤2、3。三、代码procedure Dijkstra; var u,v,e,i:longint; begin fillchar(dis,sizeof(dis),$7e); //距离 fillchar(Inh,sizeof(Inh),false); //是否在堆中 fillchar(visit,sizeof(visit),false); //是否访问过 size:=0; e:=last[s]; while e<>0 do //步骤1 begin u:=other[e]; if not(Inh[u]) then //不在堆里 begin inc(size); heap[size]:=u; dis[u]:=cost[e]; Loc[u]:=size; //Loc数组记录元素在堆中的位置 Inh[u]:=true; Shift_up(Loc[u]); //上浮 end else if cost[e]<dis[u] then //在堆里 begin dis[u]:=cost[e]; Shift_up(Loc[u]); Shift_down(Loc[u]); end; e:=pre[e]; end; visit[s]:=true; while true do begin u:=heap[1]; //步骤2 if u=t then break; //步骤4 visit[u]:=true; heap[1]:=heap[size]; dec(size); Shift_down(1); e:=last[u]; while e<>0 do //步骤3 begin v:=other[e]; if Not(visit[v]) and (dis[u]+cost[e]<dis[v]) then //与u相邻的,未被访问过的,满足三角不等式的顶点 if Inh[v] then //在堆中 begin dis[v]:=dis[u]+cost[e]; Shift_up(Loc[v]); Shift_Down(Loc[v]); end else //不再堆中 begin inc(size); heap[size]:=v; dis[v]:=dis[u]+cost[e]; Loc[v]:=size; Inh[v]:=true; Shift_up(Loc[v]); end; e:=pre[e]; end; end; writeln(dis[t]); end;http://baike.baidu.com/view/7839.htmhttp://baike.baidu.com/view/1939816.htm
2023-07-16 05:02:581

在Delphi中建立和使用别名[1]

  通常我们在Delphi外 通过使用Borland 数据库引擎(BDE)的设置单元(bdecfg exe)来建立和设置别名(Alias) 但是 实际上用户可以在Delphi或应用程序中用TDatabaseComponent或其他方法建立和使用别名 而不必在IDAPI CFG中预先定义   建立有效的别名是非常重要的 别名详细说明了数据库的定位信息和连接数据库服务器的参数 当发布应 用程序时不必担心IDAPI CFG中是否有某项设置    利用TDatabaseComponent建立别名   建立和设置一 个使用标准数据库的别名的步骤如下 //通过 对象观察器 建立BDE别名    建立一个新工程(Project)    将组件(Component)TDatabase TTable TDataSource TDBGrid 和TButton放在FORM上    双击TDatabaseComponent或在TDatabase快速菜 单上选择DatabaseEditor运行Database属性编辑器    将DatabaseName设置成 ZldchAlias 这个名字 将被当作别名 用来设置数据集组件TTable TQuery TStoredProc等的DatabaseName属性    将DriverName设置成STANDARD    单击Defaults按钮 将PATH=自动加在Parameter Overrides框中    将PATH=设置成PATH=C: 单击OK按钮关闭Database Editor    单击OK按钮关闭DatabaseEditor    将TTable的DatabaseName属性设置成 ZldchAlias    将TDataSource的DataSet属性设置成 Table    将DBGrid的DataSource属性设置成 DataSource    在Tbutton的OnClick事件过程中加入下列代码 procedureTForm Button Click(Sender:Tobject); beginTable Tablename= customer ; Table Active:=true; end;    运行程序  上面 ~ 步也可以用以下过程实现 MyAddStandAlias(AliasN:String;DbLocat:String;DriverN:string );//使用程序的方法建立BDE别名//{AliasN别名名 //DbLocat数据库定位目录 DriverN联结驱动类型}beginwithForm Database do< beginDatabaseName:=AliasN;DriverName:= STANDARD ;Params Clear;Params Add( PATH= +DbLocat);Params Add( DEFAULT DRIVER= +DriverN);endend procedureTForm Button Click(Sender:Tobject);beginMyAddStandAlias( ZldchAlias C:PARADOX );Table DatabaseName:= ZldchAlias ;DataSource DataSet:=Table ;DBGrid DataSource:=DataSource ;Table Tablename= customer ;Table Active:=true;end; lishixinzhi/Article/program/Delphi/201311/24816
2023-07-16 05:03:041

EXCEL VBA怎样将复制 wb的sheet1除第一行的所有内容复制操作,选择性粘贴为值或数字格式?怎样写?

用range对象的pastespecial方法,可以选择粘贴格式,值和数字格式的常量是xlpastevaluesandnumberformats:usedrange.copysheet1.range("a"&......).pastespecial xlpastevaluesandnumberformats
2023-07-16 05:03:142

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam,检查没有卡纸

里面有碎纸或者传感器没回位,搞不好就请人吧,网上谁也修不好
2023-07-16 05:03:244

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam怎么解决

最有效的解决卡纸的方法是:打开打印机设备的盖子,用手慢慢将纸张拖出来就可以了。如果没有卡纸,更简单了,和我那台一样,你把盖子打开,在关上就可以了··实在不行就关掉再重启·或者你的纸还有一点点在里边希望帮到你,不懂继续追问
2023-07-16 05:03:341

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam是怎么解决的呀

应该还有些纸屑吧!重新关机有用吗??
2023-07-16 05:03:444

clear path是什么意思?

clear path NBA解说中的意思是进攻路径犯规,全称是clear-path foul。以下这些会被判为进攻路径犯规:球必须自后场发起;犯规发生时球在后场圆弧顶部外的区域;转换后进攻球队获得明显球权;犯规时进攻球员和球篮之间没有防守球员;进攻球员还在后场时防守球员在进攻球员的侧面或者身后对其犯规;或者进攻球员进入前场之后,防守球员始终在其后方或侧面。扩展资料:在篮球规则中,犯规是对规则的违反,包括与对方队员的非法身体接触以及违反体育道德的举止。对犯规的处罚有失去球权、处以罚球、将犯规球员罚下等。NBA技术犯规常见的技术犯规有超额暂停,如请求超过授权数量的暂停应予批准,且判为一次技术犯规。暂停和罚球执行后,球权判给罚球球队,比赛应以在比赛中断处最近点边线处掷球入界重新开始。对裁判言语不敬、教练未经裁判许可进入球场、蓄意挥肘或任何无关联的身体接触行为企图这些都被判技术犯规。咒骂和亵渎裁判不应被认为是唯一判罚技术犯规的原由。但长篇大论的攻击性言辞、连续的指责或抱怨或可足够判定技术犯规。过度的不当行为将导致逐出比赛。NBA个人犯规球员不得拉拽、推、撞一名对方球员或者用伸展手、手臂、腿、或者弯曲膝部或者弯腰到不自然的程度以妨碍对方球员前进。这些身体接触如果导致对手改变前进路线,就构成个人犯规,应立即被吹罚。防守球员在防守持球球员时主动制造身体接触是非法的。这类身体接触包括但不限于前臂、手或者躯干的接触。犯规者被记一次个人犯规。如果犯规者是防守球员,犯规一方的球队被记一次全队犯规。如果两支球队都有球员被判个人犯规或者进攻球员被判个人犯规,将不记全队犯规。参考资料百度百科-NBA规则
2023-07-16 05:04:021

clearpath是什么意思?

clear path NBA解说中的意思是进攻路径犯规,全称是clear-path foul。以下这些会被判为进攻路径犯规:球必须自后场发起;犯规发生时球在后场圆弧顶部外的区域;转换后进攻球队获得明显球权;犯规时进攻球员和球篮之间没有防守球员;进攻球员还在后场时防守球员在进攻球员的侧面或者身后对其犯规;或者进攻球员进入前场之后,防守球员始终在其后方或侧面。扩展资料:在篮球规则中,犯规是对规则的违反,包括与对方队员的非法身体接触以及违反体育道德的举止。对犯规的处罚有失去球权、处以罚球、将犯规球员罚下等。NBA技术犯规常见的技术犯规有超额暂停,如请求超过授权数量的暂停应予批准,且判为一次技术犯规。暂停和罚球执行后,球权判给罚球球队,比赛应以在比赛中断处最近点边线处掷球入界重新开始。对裁判言语不敬、教练未经裁判许可进入球场、蓄意挥肘或任何无关联的身体接触行为企图这些都被判技术犯规。咒骂和亵渎裁判不应被认为是唯一判罚技术犯规的原由。但长篇大论的攻击性言辞、连续的指责或抱怨或可足够判定技术犯规。过度的不当行为将导致逐出比赛。NBA个人犯规球员不得拉拽、推、撞一名对方球员或者用伸展手、手臂、腿、或者弯曲膝部或者弯腰到不自然的程度以妨碍对方球员前进。这些身体接触如果导致对手改变前进路线,就构成个人犯规,应立即被吹罚。防守球员在防守持球球员时主动制造身体接触是非法的。这类身体接触包括但不限于前臂、手或者躯干的接触。犯规者被记一次个人犯规。如果犯规者是防守球员,犯规一方的球队被记一次全队犯规。如果两支球队都有球员被判个人犯规或者进攻球员被判个人犯规,将不记全队犯规。参考资料百度百科-NBA规则
2023-07-16 05:04:151

clear path在NBA中是什么意思?

clear path NBA解说中的意思是进攻路径犯规,全称是clear-path foul。以下这些会被判为进攻路径犯规:球必须自后场发起;犯规发生时球在后场圆弧顶部外的区域;转换后进攻球队获得明显球权;犯规时进攻球员和球篮之间没有防守球员;进攻球员还在后场时防守球员在进攻球员的侧面或者身后对其犯规;或者进攻球员进入前场之后,防守球员始终在其后方或侧面。扩展资料:在篮球规则中,犯规是对规则的违反,包括与对方队员的非法身体接触以及违反体育道德的举止。对犯规的处罚有失去球权、处以罚球、将犯规球员罚下等。NBA技术犯规常见的技术犯规有超额暂停,如请求超过授权数量的暂停应予批准,且判为一次技术犯规。暂停和罚球执行后,球权判给罚球球队,比赛应以在比赛中断处最近点边线处掷球入界重新开始。对裁判言语不敬、教练未经裁判许可进入球场、蓄意挥肘或任何无关联的身体接触行为企图这些都被判技术犯规。咒骂和亵渎裁判不应被认为是唯一判罚技术犯规的原由。但长篇大论的攻击性言辞、连续的指责或抱怨或可足够判定技术犯规。过度的不当行为将导致逐出比赛。NBA个人犯规球员不得拉拽、推、撞一名对方球员或者用伸展手、手臂、腿、或者弯曲膝部或者弯腰到不自然的程度以妨碍对方球员前进。这些身体接触如果导致对手改变前进路线,就构成个人犯规,应立即被吹罚。防守球员在防守持球球员时主动制造身体接触是非法的。这类身体接触包括但不限于前臂、手或者躯干的接触。犯规者被记一次个人犯规。如果犯规者是防守球员,犯规一方的球队被记一次全队犯规。如果两支球队都有球员被判个人犯规或者进攻球员被判个人犯规,将不记全队犯规。参考资料百度百科-NBA规则
2023-07-16 05:04:281

这段代码错在哪里啊?紧急紧急!!!!!!!11

41
2023-07-16 05:04:411

Android8.0 内置第三方APP

``` LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE := NewLandScanDemo LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_BUILT_MODULE_STEM := package.apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := platform LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_DEX_PREOPT := false LOCAL_MULTILIB := 32 include $(BUILD_PREBUILT) include $(call all-makefiles-under,$(LOCAL_PATH)) $(shell mkdir -p $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/lib_Code32Change.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM30.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM50.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM60.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libcrypto-nls.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libGXIMG.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnlslog.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnls-scanner.software.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnlsxml2.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanCamera.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanCameraJava.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanDriver.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanMedia.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanUtil.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libuIMG3.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) ``` ``` include $(call all-makefiles-under,$(LOCAL_PATH)) $(shell mkdir -p $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/lib_Code32Change.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM30.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM50.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libCM60.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libcrypto-nls.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libGXIMG.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnlslog.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnls-scanner.software.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libnlsxml2.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanCamera.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanCameraJava.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanDriver.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanMedia.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libScanUtil.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) $(shell cp -rf $(LOCAL_PATH)/lib/libuIMG3.so $(TARGET_OUT)/app/NewLandScanDemo/lib/arm) ```
2023-07-16 05:05:021

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam怎么解决

卡纸了..看看把硒鼓拿出来.卡在那个位置,清除就可以了.
2023-07-16 05:05:122

hp 1005 打印机交替显示Jam in print paper path 。。 Open door and clear jam

机器英文的意思是卡纸,打开前门盖并且清除卡纸。应该是你机器里面纸张没有取完或者传感没有复位。
2023-07-16 05:05:221

jsp下载zip及中文名字的文件

response.flushBuffer();改成output.flush()试试?
2023-07-16 05:05:531

VFP 写的软件同步升级 EXE

当然可以,你把要升级的EXE放在局域网中的一台电脑上并共享,在客户机建个ini的文件,里面记录服务器名和升级的计算机名称给我的给你参考 *Set Step On Clear All Set Talk Off _Screen.Visible=.F. Local lcExecPath, lcFileName, lcSkeleton, lnFileCount,lcUpdatePath Local lcExe, ltLatest, lnI Local Array TargetFile(1), SourceFile(1) * Get the path to the executable directory lcExecPath = Justpath(Sys(16)) * Make that the default Set Default To (lcExecPath) fname="f:Prgpublicprogsuserfun.prg" Set Procedure To (fname) && AddI cFileName="Config.ini" If File(cFileName)=.F. If Adir(cIniFile,"*.ini")=0 Messagebox("没有 Ini 设置文件",48,"提示",4000) Return Endif cFileName=cIniFile(1,1) Endif lcUpdatePath=Alltrim(read_ini(cFileName,"updatepath")) lcEXE = read_ini(cFileName,"Excuteprog") nupdatefile=0 *SET STEP ON lok=.T. If Empty(lcUpdatePath) lok=.F. Messagebox("没有设置程序更新目录",48,"提示",4000) Else If Right(lcUpdatePath,1)<>"" lcUpdatePath=lcUpdatePath+"" Endif lok=.T. If Direct(lcUpdatePath)=.F. If getPlatform()>=2 &&win9x则不自动连接 lcpath = lcUpdatePath lcdrive = read_ini(cFileName,[Cdrive]) lcusername = read_ini(cFileName,[Cusername]) lcpassword = read_ini(cFileName,[Cpassword]) llogin=net_login(lcpath ,lcdrive ,lcusername ,lcpassword ) If llogin=.T. lok=.T. Else lok=.F. Endif Else lok=.F. Endif Endif If lok=.T. updatefile(lcUpdatePath) Else Wait Clear If Left(lcUpdatePath,2)="\" N=At("",Substr(lcUpdatePath,3)) cPc=Substr(lcUpdatePath,3,N-1) Messagebox("网络机器:"+cPc+"没有联上网络,不能更新程序!",48,"提示",3000) Return .F. Else Messagebox("程序更新目录:"+lcUpdatePath+"不存在,不能更新程序!",48,"提示",3000) Endif Endif Endif lcSelfFileName=Upper(Justfname(Sys(16))) &&程序本身的名字 If Empty(lcExe) * lcSelfFileName=Upper(Justfname(Sys(16))) &&程序本身的名字 N=Adir(exeFile,"*.exe") If N=1 Messagebox("没有执行程序!",48,"提示",3000) Return Endif For j=1 To N If lcSelfFileName<>Upper(exeFile(j,1)) lcExe=exeFile(j,1) Exit Endif Endfor Endif If File(lcExe)=.F. Messagebox("没有执行程序!",48,"提示",3000) Else openfile(lcExe) Endif Quit RETURN Function updatefile Parameters lcUpdatePath lcSkeleton ="*.*" nTargetFileCount = Adir(TargetFile,lcSkeleton) lcSelfFileName=Upper(Justfname(Sys(16))) &&程序本身的名字 lcMsg = "正在检查更新程序与目录,请稍候!......." Wait Window lcMsg Noclear Nowait At Srow()/2, (Scols()-Len(lcMsg))/2 nSourceFileCount=Adir(SourceFile,lcUpdatePath+lcSkeleton) lcFileName = Upper(Juststem(Sys(16))) If nSourceFileCount>0 &&源程序目录有文件,则根据文件修改日期来更新 Wait Window lcMsg Noclear Nowait At Srow()/2, (Scols()-Len(lcMsg))/2 ltLatest = {} For lnI = 1 To nSourceFileCount cfilename=Alltrim(SourceFile(lnI ,1)) If cfilename=lcSelfFileName &&如果是程序本身,则跳过 Loop Endif dfiledate=SourceFile(lnI ,3) cfiletime=SourceFile(lnI ,4) N=Ascan(TargetFile,cfilename)&&检查目标目录处是否有与源程序相同的文件 If N>0 &&有 i=Mod(N,5)+Int(N/5) &&第几行 If dfiledate>TargetFile(i,3) Or (dfiledate=TargetFile(i,3) And cfiletime>TargetFile(i,4) ) &&如果源文件日期时间大于目标文件的,就更新 Try Copy File (lcUpdatePath+cfilename) To (cfilename) nupdatefile=nupdatefile+1 Catch If lcFileName<>cfilename Messagebox("程序文件:"+cfilename+"正在使用,不能更新。"+Chr(13)+"请关闭后重新启动更新程序!",48,"提示",3000) Else m=1 Endif Endtry Endif Else &&没有,直接复制过来 Try Copy File (lcUpdatePath+cfilename) To (cfilename) nupdatefile=nupdatefile+1 Catch If lcFileName<>cfilename Messagebox("程序文件:"+cfilename+"正在使用,不能更新。"+Chr(13)+"请关闭后重新启动更新程序!",48,"提示",3000) Else m=1 Endif Endtry Endif Endfor Endif Wait Clear If nupdatefile>0 Messagebox("本次更新了"+Str(nupdatefile,3)+"个程序文件!",64,"提示",1000) Endif Endfunc
2023-07-16 05:06:001

iOS 常见第三方软件 URL Schemes

描述文件与设备管理:prefs:root=General&path=ManagedConfigurationList Phone: tel://[phonenumber] iMessage: sms:// Calendar: calshow:// Reminders: x-apple-reminder:// Mail: message:// Maps: maps:// iTunes Store: itms:// App Store: itms-apps:// iBooks: ibooks:// Game Center: gamecenter:// Facetime: facetime:// 蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_IDVPN — prefs:root=General&path=Network/VPN Wi-Fi:prefs:root=WIFI 定位服务:prefs:root=LOCATION_SERVICES 个人热点:prefs:root=INTERNET_TETHERING 关于本机:prefs:root=General&path=About 辅助功能:prefs:root=General&path=ACCESSIBILITY 飞行模式:prefs:root=AIRPLANE_MODE 锁定:prefs:root=General&path=AUTOLOCK 亮度:prefs:root=Brightness 蓝牙:prefs:root=General&path=Bluetooth 时间设置:prefs:root=General&path=DATE_AND_TIME FaceTime:prefs:root=FACETIME 设置:prefs:root=General 键盘设置:prefs:root=General&path=Keyboard iCloud:prefs:root=CASTLE iCloud备份:prefs:root=CASTLE&path=STORAGE_AND_BACKUP 语言:prefs:root=General&path=INTERNATIONAL 定位:prefs:root=LOCATION_SERVICES 音乐:prefs:root=MUSICMusic Equalizer — prefs:root=MUSIC&path=EQMusic Volume Limit — prefs:root=MUSIC&path=VolumeLimitNetwork — prefs:root=General&path=NetworkNike + iPod — prefs:root=NIKE_PLUS_IPODNotes — prefs:root=NOTESNotification — prefs:root=NOTIFICATIONS_IDPhone — prefs:root=PhonePhotos — prefs:root=PhotosProfile — prefs:root=General&path=ManagedConfigurationListReset — prefs:root=General&path=ResetSafari — prefs:root=SafariSiri — prefs:root=General&path=AssistantSounds — prefs:root=SoundsSoftware Update — prefs:root=General&path=SOFTWARE_UPDATE_LINKStore — prefs:root=STORETwitter — prefs:root=TWITTERUsage — prefs:root=General&path=USAGEWallpaper — prefs:root=Wallpaper 微博 sinaweibo:// 优酷 youku:// 美拍 tencent101022619:// 唱吧 changba:// 京东 openApp.jdMobile:// 同步推 wxef5b6333c715b7bd:// 爱奇艺 qiyi-iphone:// 万年历 tencent100294478:// 网易新闻 QQ14AC1032:// 百度贴吧 tencent100385258:// QQ空间 tencentapi.qzone.reqContent:// 虾米音乐 sinaweibosso.3845915579://Instagram instagram:// UC浏览器 QQ367B7700:// 天天酷跑 tencent100692648:// QQ音乐 tencent100497308.content:// 美图秀秀 mtxx:// 酷狗音乐 tencent205141:// 美颜相机 myxj:// 腾讯视频 tencent100498506:// 腾讯新闻 QQ6BF159C6:// 百度视频 sinaweibosso.1706388304:// 搜狐视频 wxb6c82517aa33d525:// 有道词典 yddictproapp:// 百度地图 bdmap:// 网易云音乐 orpheus:// 系统功能调用URL: 蜂窝设置 prefs:root=MOBILE_DATA_SETTINGS_ID 键盘设置 prefs:root=General&path=Keyboard 壁纸设置 prefs:root=Wallpaper 铃声设置 prefs:root=Sounds 发送短信 sms:// WIFI设置 prefs:root=WIFI 辅助功能设置 prefs:root=General&path=ACCESSIBILITY 自动锁定设置 prefs:root=General&path=AUTOLOCK 电话 mobilephone:// 备忘录 mobilenotes:// 墨客 com.moke.moke-1:// 名片全能王 camcard:// 扫描全能王 camscanner://TuneIn Radio tunein:// 或 tuneinpro://OfficeSuite mobisystemsofficesuite://WPS Office KingsoftOfficeApp://Line line://1Password onepassword://Clear( 著名的Todo应用) clearapp:// Chrome谷歌浏览器 googlechrome://Calendars 5 calendars://GoodReader 4 com.goodreader.sendtogr://PDF Expert 5 pdfexpert5presence://Documents 5 rdocs://nPlayer nplayer-http://GPlayer gplayer://AVPlayer HD AVPlayerHD://AVPlayer AVPlayer://Ace Player aceplayer:// 12306订票助手 trainassist:// 金山词霸 com.kingsoft.powerword.6:// 节奏大师 tencentrm:// 赶集生活 **:// 凤凰新闻 comIfeng3GifengNews:// 高铁管家 gtgj:// 飞信 fetion:// 豆瓣FM doubanradio:// 大智慧 dzhiphone:// 布卡漫画 buka:// 爱奇艺PPS ppstream:// 哔哩哔哩动画 bilibili:// 56视频 com.56Video:// 365日历 rili365:// 58同城 wbmain:// 遇见 iaround:// 陌陌 momochat:// 旺旺卖家版 wangwangseller:// 有道词典 yddict:// 优酷 youku:// 掌阅iReader iReader:// 艺龙旅行 elongIPhone:// 迅雷+迅雷云播 熊猫公交 wb1405365637:// 携程无线 CtripWireless:// 无线苏州 SuZhouTV:// 唯品会 vipshop:// 微视 weishiiosscheme:// 微拍 wpweipai:// 旺信 wangxin:// 网易公开课 ntesopen:// 网易将军令 netease-mkey:// 万年历 youloft.419805549:// 土豆视频 tudou:// 同花顺 amihexin:// 天涯社区 tianya:// 天气通Pro sinaweatherpro:// 天气通 sinaweather:// 墨迹天气 rm434209233MojiWeather:// 腾讯新闻 qqnews:// 腾讯微云 weiyun:// 腾讯地图 sosomap:/ 淘宝旅行 taobaotravel:// 人人 renrenios:// 蜻蜓FM qtfmp:// 浦发银行 wx1cb534bb13ba3dbd:// 招商银行 cmbmobilebank:// 支付宝 alipay:// 建设银行 wx2654d9155d70a468:// 工商银行 com.icbc.iphoneclient:// 酷我音乐 com.kuwo.kwmusic.kwmusicForKwsing:// 酷狗音乐 kugouURL:// 京东 openApp.jdMobile:// 今日头条 snssdk141:// QQ音乐 qqmusic:// QQ斗地主 tencent382:// QQ浏览器 mttbrowser:// QQ安全中心 qmtoken:// QQ国际版 mqqiapi://PPTV pptv:// 爱奇艺视频 qiyi-iphone:// 暴风影音 com.baofeng.play:// 保卫萝卜2 wb2217954495:// 保卫萝卜 wb1308702128:// 百度音乐 baidumusic:// 百度视频 baiduvideoiphone:// 或 bdviphapp:// 百度糯米 bainuo:// 百度魔图 photowonder:// 百度魔拍 wondercamera:// 百度地图 baidumap:// 百度导航 bdNavi:// 百度 baiduboxapp:// 或 BaiduSSO:// 搜狗输入法 com.sogou.sogouinput:// 搜狐视频 sohuvideo-iphone:// 或 sohuvideo:// 搜狐新闻 sohunews:// 随手记 FDMoney:// 腾讯企业邮箱 qqbizmailDistribute2:// 腾讯手机管家 mqqsecure:// 腾讯视频 tenvideo:// 或 tenvideo2:// 或 tenvideo3:// 腾讯微博 TencentWeibo:// 天猫 tmall:// 天天星连萌 tencent100689806:// 天天爱消除 tencent100689805:// 天天酷跑 tencent100692648:// 天天飞车 tencent100695850:// 天天动听 ttpod:// 挖财记账 wacai:// 威锋网 com.weiphone.forum:// 新浪微博 weibo:// 或 sinaweibo:// 网易邮箱 neteasemail:// 高德导航 Autonavi:// 百度输入法 BaiduIMShop:// 百度贴吧 com.baidu.tieba:// 淘宝 taobao:// 微信 wechat:// 或 weixin:// 百度云 baiduyun:// 网易新闻 newsapp:// 设置 prefs:root=SETTING 定位服务 prefs:root=LOCATION_SERVICESUC 浏览器 ucbrowser://E-Mail MESSAGE://QQ mqq:// 抖音:snssdk1128:// 快手:kwai:// 剪映:videocut:// 轻颜相机:ulike:// B612:b612cn://
2023-07-16 05:06:071

父亲节手抄报英语内容

  父亲节手抄报英语内容(一)   父亲节的由来:   Father"s Day, contrary to popular misconception, was not established as a holiday in order to help greeting card manufacturers sell more cards. In fact when a “father"s day” was first proposed there were no Father"s Day cards!   父亲节与普遍的误解不同的是,它并非是一个为了帮助贺卡制作厂商销售更多贺卡的节日。事实上,当“父亲节”的提议首先被提出时,父亲节贺卡根本就不存在。   Mrs. John B Dodd, of Washington, first proposed the idea of a “father"s day” in 1909. Mrs. Dodd wanted a special day to honor her father William, whose wife died while giving birth to their sixth child. Mr. Smart was left to raise the newborn ;and his other five children by himself on a rural farm in eastern Washington state. It was after Mrs. Dodd became an adult that she realized the strength and selflessness her father had shown in raising his children as a single parent.   华盛顿州的约翰·布鲁斯·多德夫人在1909年首先提出了设立“父亲节”的提议。多德夫人希望有一个特殊的日子来向她的父亲———威廉·斯玛特表示敬意。他的妻子在生他们第六个孩子时因难产而死。斯玛特先生在华盛顿州东部乡下的农场里独自养大了六个孩子。多德太太成人后她才意识到她的父亲一个人养大孩子所表现的力量和无私。   The first Father"s Day was observed on June 19,1910 in Washington. And it was in 1966 that President Lyndon Johnson officially declared the 3rd Sunday of June as Father"s Day.   1910年的6月19日人们在华盛顿庆祝了第一个父亲节。林登·约翰逊总统最终于1966年宣布每年六月的第3个星期天为父亲节。   Father"s Day has become a day to not only honor your father, but all men who act as a father figure. Stepfathers, uncles, grandfathers, and adult male friends are all honored on Father"s Day.   父亲节现在已经成为向父亲及所有扮演父亲角色的人表达敬意的节日。继父,伯父,祖父所有成年男性都将在父亲节受到尊敬。   父亲节名言   若是一个意志薄弱的人恐怕早已被打倒   With illnesses of his own, he still stood by her side   但哪怕自己也疾病缠身,他依旧站在她的身旁   caring for her and loving her until the day she died.   照顾她爱她直到她的生命终止   Twenty days later his own time was at an end.   20天后他随她而去   I lost my hero, my father, a man who was my friend.   我失去了我的英雄,我的父亲,我的朋友   A few years have passed, and life just isn't the same.   许多年过去了,生活变了样   But as Father's Day approaches, I will celebrate his name.   但每当父亲节临近,我还是会在心里念他的名字   With prayers to him and God above to stay by my side,   我为他祈祷,相信上帝会在我身旁   父亲节手抄报英语内容(二)   我眼中的父亲:   说起父亲,他的形象总是不自觉的和严厉联系起来了,他打过我,骂过我,也对我很好。但是父亲不光是严厉,他也很孝顺,有些事他会以身作则给我看。   Speaking of his father, his image is always unconsciously and severely linked, he hit me, cursing me, but also to me very good. But the father is not only strict, he is also very filial, some things he will set an example for me.   就在前些日子,我奶奶生病了。父亲赶忙放下手头的工作,赶回我爷爷家。一回家,连鞋都没脱,就冲到奶奶的屋里。只见我奶奶双眼紧闭,双眉紧蹙,皮包骨的手放在那早已凹陷下去的肚子上。父亲坐在她的床边,把手放在她的额头上摸了摸,给奶奶盖了盖被子。走出房间,给我爷爷说:“爸,给我烧一壶水,我给妈妈擦擦身子降降温。”爷爷并没有照着做,跟我父亲说:“用酒精擦,效果好,降温快。”说完,爷爷去找酒精去了。爸爸追上去,拉住爷爷,语重心长的说:“爸,用酒精,效果确实好,降温确实快。但是,我妈妈年纪也大了,她的心脏又不好,会受不了的。不是吗?”爷爷停下来,看看我父亲,回答说:“是吗?我怎么没听说啊?!”“爸,这都什么时候了。我当然是为了我妈妈好啊!爸,相信我!”父亲说完,爷爷就去烧水去了。   Just a few days ago, my grandma was sick.. Father quickly put aside the work, back to my grandfather home. A home, did not even shoes off, rushed to grandma's house. I saw my grandmother closed her eyes, frowning, skinny hand sunk in that long belly. The father sat in her bed, put his hand on her forehead and touched it and covered her with a quilt.. Out of the room, to my grandfather said: "Dad, give me a pot of water, wipe the body cool down to my mother." Grandpa did not do as, with my father said: with alcohol rub, good effect, cooling quickly." Then, Grandpa went to alcohol.. Dad pulled the catch up, Grandpa said earnestly: "Dad, with alcohol, the effect is really good, really fast cooling. But my mother is old, and her heart is not good, can not stand the. "No," said the grandfather, looking at my father, "is it? I have not heard of it?!". Of course I was for my mom! Dad, believe me! "His father said, grandpa go to boil water to.   “吁……”水烧开了!父亲赶紧把水倒进盆子里,调节好水温,准备给奶奶擦身上。父亲先用一块热毛巾敷在奶奶的头上,在用另一块热毛巾,小心翼翼的给奶奶擦胳膊。在擦到脚的时候,奶奶的脚上有脏的东西,父亲就一点一点的搓,非常轻。搓完了,只见脏的东西没有了,而脚,却一点也不红。   "Gee......" The water is boiling! Father hurriedly poured water into the basin, adjust the water temperature, ready to give grandma brush on. Father first used a hot towel on the head of grandma, in another hot towel, carefully rub her arm. When the rub feet, grandma's feet dirty things, the father on the one point one points, very light. When the rub is over, the thing that sees only the dirty is not, but the foot, but a bit also not red.   看到这,我想起父亲告诉我那几句名言:亲有过,谏使更。恬吾色,柔吾声。这是《弟子规》里面的话,意思是:父母有过错,劝他们更改。要面带笑容,语调柔和。还有一句是:夫孝,天之经也,地之义也。这几点,父亲都做到了。他不只是告诉我对长辈要尊敬,要孝顺,更重要的是要把名言变成你自己的东西——行动。   To see this, I remembered my father told me that a few words: a suggestion that more pro. Tim my color, my voice soft. This is the "disciple gauge" inside, the meaning is: parents have fault, advise them to change. Be smiling and softly. There is also a sentence: husband filial piety, the day of the earth, the meaning of land also. And the father did it.. He did not just tell me to respect the elders, to filial piety, but more importantly, to put the famous words into your own thing - action.   很庆幸有这样一个好父亲,在我眼中,这个世界上,父亲是最完美的!   I am glad to have such a good father, in my eyes, this world, the father is the most perfect!   父亲节手抄报英语内容(三)   等待父亲的爱:   每个幸福的家里都会有着这样一个人:他的肩膀比山峰还高,上面总会留下儿女曾经的哭痕;他的心比天地广,曾经总是原谅幼小的儿女犯下的错误;他的拥抱比太阳还温暖,曾经安慰过失落的儿女……这个人就是——父亲!   Every happiness in the home will have such a person: his shoulder is higher than the mountains, above always leave children once cry marks; his heart than world wide, had always forgive young children to make mistakes; his embrace is warmer than the sun, once had to comfort the lost children... This man is -- father.!   父亲的伟大是无穷无尽的,可我的父亲真的就有那么伟大吗?他每天都只是忙忙碌碌的,回来吃顿晚餐都难!父亲既然不管这个家,他还伟大吗?   Father's greatness is endless, but my father really is so great?? every day he is busy, come back to eat dinner are hard to! Now that my father regardless of the family. He is also a great??   一开始,我并不大在意父亲,因为他是那么少与我见面,会有多少对他的思念呢?可是到后来,《爸爸去哪儿》这部电视剧放映在了电视上,我眼巴巴地看着五个父亲和五个孩子在一起的快乐,该是多么羡慕啊,恨不得自己就是小孩其中的一员。再想想,我的父亲呢?他真是不该配做我的父亲!   The start and I did not care about father, because he is so little and I meet, there will be many of his thoughts? But later, "Dad, where" the drama screened in the TV, I eagerly looked at five father and five children in happy together, the envy ah, very anxious to oneself is the child of a member. What about my father? He's not my father.!   渐渐的,羡慕一天天膨胀,变成了嫉妒。偏偏在这时,《爸爸去哪儿》这部电视剧出现了令人感动的一幕:在举行滑沙比赛中,一位叫田雨橙的小女孩想从最高的沙堆独自滑下来。作为父亲,怎么可能让她去冒险呢?可是她的父亲田亮答应了!令人意想不到的是,田亮在她女儿滑下去的那一瞬间,紧紧抓住滑板的把柄,随着滑板一起跑下去!   Gradually, the envy of a day expansion, became jealous. Are at this time, "Dad, where" the drama there has been a touching scene: in held sand skiing competition, a little girl named orange to from the top of the sand alone to slide down. As a father, how could let her go on an adventure?? but her father Tian promised! Is unexpected, Tian Liang in her daughter to slide down the moment, hold on tight to slide the handle, with skateboards ran down!   父亲,这个词在我心中因为种种原因,使我感到如此陌生了……   Father, the word in my mind for various reasons, so I feel so strange......   “平日为事业忙碌的爸爸,终于可以陪我从早到晚。   "Normally for the cause of busy father, finally can accompany me from morning to night.   其实我的愿望很简单,如果你有时间,请多陪陪我好吗?   In fact, my desire is very simple, if you have time, please stay with me?   每一个有你在的地方,。是我心中最美的港湾。”   Every place you're in,. Is the most beautiful harbor in my heart."   《爸爸去哪儿》这一首诗使暖流再次流入我那孤独寂寞的心田,是如此幸福,美好……看完这首诗以后,我时常会暗暗想到:或许,父亲一定有在关怀着我。只是,他的时间与精力都不够,我需要等待。   "Daddy where" this poem makes me warm once again into the lonely heart, happiness is so beautiful...... After reading this poem, I often thought: perhaps, my father must care for me. But, his time and energy are not enough, I need to wait for.   渐渐转变的心态挽救回了悬崖上妄想挣脱的鸟儿。   Gradually changing the mentality saved the cliff to break free of the birds.   父亲的爱,一开始向我流来……春天,叫我注意身体;夏天,给我买可口的西瓜;秋天,无数次的叮嘱;冬天,披上的一件件衣服……渴望得到爱的我真正得到了想要的!此时此刻,等待换来的父爱已不再陌生,我沐浴在父爱的阳光下,是如此幸福……   Father's love, the beginning to flow to me...... Spring, called my attention to the body; summer, give me to buy delicious watermelon; in autumn, told many times; in winter, put on a piece of clothes... Eager to get love I really get what you want! At this moment, waiting for the return of father already no longer unfamiliar, I bathed in father of the sun is so happy...   父亲节手抄报英语内容(四)    父亲节献礼作文:   今天,是父亲节,是我们神圣而伟大的父亲的节日。   Today is father's day, a festival of our sacred and great father..   据说,世界上第一个父亲节,1910年诞生于美国。1909年,住在美国华盛顿州士波肯市的杜德夫人,当她有一次参加母亲节时,想:为什么世界上没有父亲节呢?   It is said that the first father's day in the world was born in 1910.. In 1909, lived in Washington State scholar wave Ken, Mrs. Dodd, when she has time to take part in the mother's day, think: why is it that have no father's day in the world?   杜德夫人的母亲在她十三岁那一年去世,遗留下六名子女;杜德夫人的父亲威先生,在美国华盛顿农场,独自一人,父兼母职抚养六名子女长大成人,最后,威先生因过度劳累而死。   Mrs. Dodd's mother in her 13 years old died, left six children; Mrs. Dodd's father, Mr. Wei, in the United States Washington farm, a person alone, father and mother position raising six children grown up. Finally, Mr. Wei died from overwork.   1909年那年,正好是威先生的辞世之年,当杜德夫人过完母亲节后。那时,她才明白,她的父亲在养育儿女过程中的付出,并不亚于任何一位母亲。   In 1909 of that year, Mr. Wei is just the death year, when Mrs. Dodd, after the holiday. At that time, she realized that her father in the process of raising the children's process, no less than any one mother.   于是,就有了今天的父亲节。为人子女的我们应该在这天向爸爸问候一句,跟爸爸聊聊天。我想对我的爸爸说:”我爱您,永不渝!“   So, today's father's day.. For the children of our children should be on the day of the day to greet the father, chat with dad. I want to say to my father: "I love you, never Yu!"   父亲节手抄报英语内容(五)   父亲节:   又到父亲节。   And to father's day..   人们常说父爱如山,可是,我也享受到了水般温柔的父爱。   People often say that father's love, but, I also enjoy the gentle water like love.   90年代中期的我还是小东西,跟着当老师的妈妈生活在一个美丽的小山村,爸爸在千里之外的云南的部队里工作。感觉那时的军人很受人尊敬,爸爸也有很多出差的机会。于是,我便经常可以穿一些漂亮的衣衫,吃一些乡下孩子几乎见也没见过的东西,甚至还有大白兔奶糖。直到现在我的牙齿仍是黄黄的,估计是那时吃糖吃多了的缘故。而孩提时最快乐的是爸爸从部队里回来探亲,我便可以整日骑在身高1。76的爸爸的肩上,戴着大大的军帽,把清脆的笑声撒满乡间的小路。   I was a little thing in the middle of the 90's, followed by a teacher's mother who lives in a beautiful village, and his father works in the army of thousands of miles away from Yunnan.. It feels like a soldier was honored and Dad had a lot of business trips to the. Then, I often can wear beautiful clothes, eat some country boy was almost never seen things, and even the big white rabbit toffee. Until now my teeth is yellow, estimation is then ate a lot of candy's sake. And the happiest when I was a child was that Dad came back from the army to visit relatives, and I could ride my height 1 all day.. 76 the father's shoulders, wearing a big hat, the clear laughter strewn path in the countryside.   大概在我7岁那年,妈妈可以随军了。我们离开了家乡,来到至今仍让我魂牵梦绕的彩云之南,开始了一段全新的生活。到现在我都弄不明白,经常问爸爸妈妈,那个时候为什么爸爸出差总是可以带上我呢?难道我不要上学吗?   Probably when I was 7 years old, the mother can the army. We left home, came to still let me dream of Yunnan, to start a new life. I don't understand now, often asked my father and mother, then why my father always can take me? Don't I go to school?   在爸爸妈妈的小心呵护下,我不尽如人意地长大了(尽管爸妈付出了很多的努力,可一直体质太差)。上中学的时候,爸爸转业到地方,被当地政府部门委以重任。后来,妈妈由于工作出色也担任了领导,自然少了一些时间来照顾我。记得有一次我又生病了,妈妈太忙,只能要爸爸带我去医院。在医院输液的时候,医生找不到血管,扎了一次又一次。我靠在爸爸的怀里,呻吟着。爸爸见我那么痛苦,对医生说:要不不打了吧!回到家,爸爸有那么一点点生气,觉得两个人都忙于工作疏于照料孩子不行。没过多久,妈妈就真的辞去了领导职务,一心一意照顾我们。   Under the care of mom and Dad, I am not satisfactory to grow up (although parents have paid a lot of efforts, but has been physical too). In high school, my father transferred to civilian, was entrusted with the task of local government. Later, my mother as a result of the work well as a leader, naturally less time to take care of me. I remember once I got sick, my mother is too busy, can only take me to the hospital. In the hospital infusion, the doctor can not find blood vessels, ligation again and again. I leaned in my father's arms, and I groan. My father to see me in so much pain, said to the doctor: or not to play! Back home, dad is just a little angry, think two people are busy with work neglect to take care of a child is not. Before long, my mother really quit the leadership position, wholeheartedly take care of us.   此刻,往事一桩桩,一件件越来越清晰地在脑海里重现,一股股热浪在我身体里奔涌。   At the moment, the past one after another, one more and more clearly reappear in the mind, a heatwave in my body flush.   爸爸,在儿子的心中,非常清楚地知道,只有你和妈妈才是真正舍不得我,时刻牵挂着我的人。儿子也许从没有认真地对您说过一句"我爱你",有时甚至让你伤心了。今天,就让儿子在心里轻轻地说一声:爸爸,我爱你!   Dad, in the hearts of his son, very clearly know that only you and your mother is really reluctant to me, always worried about me. My son might not have seriously said to you a "I love you", sometimes you sad. Today, let the son in the heart gently say: Daddy, I love you!   祁愿我的双亲身体健康,开开心心度过每一天!   Pray my parents healthy, happy to spend every day!    推荐阅读:
2023-07-16 05:06:141

android 怎么清理 XWalkView 缓存的LocalStorage

WebView的缓存可以分为页面缓存和数据缓存:1,页面缓存: >指加载一个网页时的html、JS、CSS等页面或者资源数据。 >这些缓存资源是由于浏览器的行为而产生,开发者只能通过配置HTTP响应头影响浏览器的行为才能间接地影响到这些缓存数据。 >缓存的索引存放在/data/data/package_name/databases下。 >文件存放在/data/data/package_name/cache/xxxwebviewcachexxx下。2,数据缓存 : >数据缓存分为AppCache和DOM Storage两种。 >这些缓存资源是由开发者的直接行为而产生,所有的缓存数据都由开发者直接完全地掌控。 >Android中Webkit使用一个db文件来保存AppCache数据(my_path/ApplicationCache.db) >Android中Webkit会为DOM Storage产生两个文件(my_path/localstorage/http_h5.m.taobao.com_0.localstorage和my_path/localstorage/Databases.db)。那既然了解了,怎么清除呢: 以下是百度出来的答案:1.webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 2.context.deleteDatabase(“WebView.db”); 3.context.deleteDatabase(“WebViewCache.db”);4.webView.clearCache(true); 6.webView.clearFormData(); 7.getCacheDir().delete(); 8.用File的delete方法删除缓存文件夹;12345老实说,对我的问题,没多大用,还是那句话,有事请Google 其实如果你只是想要每次用webView.loadUrl(url)加载新的页面显示,那么调用webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE)就可以实现了,并不需要去删除缓存文件什么的。 但是我的项目中使用了JavaScript的交互,而JavaScript的加载是通过头文件去获取加载的,所以每次我去获取新的页面的时候,虽然页面是新的,但是头文件中的数据还是old的,所以每次加载到的js都是old的。那么如何去做呢? 上面提到这个头文件是浏览器HTTP相应头去获取的,开发者只能间接的影响,并不能控制。 所以单独的webView.clearCache(true)是不能成功的,还需要清除webView的Cookie才行。 所以我最终的解决方法是在Activity的onDestroy()方法中添加如下代码:@Overrideprotected void onDestroy() { super.onDestroy(); //清空所有CookieCookieSyncManager.createInstance(QzmobileApp.getContext()); //Create a singleton CookieSyncManager within a contextCookieManager cookieManager = CookieManager.getInstance(); // the singleton CookieManager instancecookieManager.removeAllCookie();// Removes all cookies.CookieSyncManager.getInstance().sync(); // forces sync manager to sync nowwebView.setWebChromeClient(null);webView.setWebViewClient(null);webView.getSettings().setJavaScriptEnabled(false);webView.clearCache(true);}
2023-07-16 05:06:331

如何用Android NDK编译FFmpeg

一、安装cygwin、配置ndk和下载ffmpeg源码这步就不说了,网上很多教程,再次声明本教程只针对ndk R4这个版本。需要说明的是,本人在cygwin安装路径下的.bash_profile文件中指定的NDK路径如下所示。因为本人装了好几个NDK,因此后面的R4只是个标示。NDK_R4=/cygdrive/d/android-ndk-r4export NDK_R4二、编译前准备和编译1、因为R4这个NDK比较旧,交叉编译的时候需要在一个Android环境中,那简单,创建一个Android空项目,把整个项目拷出来,在项目下建立一个文件夹jni,把ffmpeg0.6.6的源码拷进去。左图,HelloJni就是我新建的一个项目,Android.mk这时候你还没有,先不用管。右图ffmpeg-0.6.6文件夹的内容要跟我一样,直接就是代码。我这里的ffmpeg_cywin这个文件夹是随便建的,放哪里无所谓的。2、在ffmpeg-0.6.6下建立一个文件config.sh,内容如下所示。需要注意的是,unix下的换行符和windows下是不一样,如果直接拷贝到windows下的记事本,后面执行这个config.sh的时候会出问题,这里我用的是notepad++编辑的,在编辑->档案格式转换->转换为UNIX格式。(注意,后面的所有的Android.mk的编辑都有此要求)。简单说一下这个config.sh,PREBUILT和PLATFORM根据你安装ndk的位置而不同,config.sh其实是一个脚本,执行这个脚本的时候又调用了另外一个脚本configure,configure主要是根据编译选项(下面enable disable那些),生成相应的编译配置,就是说你想要编译ffmpeg什么模块就自己定制编译选项的内容。基本上这个文件只要修改一下PREBUILT和PLATFORM就行,其他都不用改。#!/bin/bashexport PREBUILT=D://android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0export PLATFORM=D://android-ndk-r4/build/platforms/android-8/arch-arm./configure --target-os=linux --arch=arm --enable-version3 --enable-gpl --enable-nonfree --disable-stripping --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-encoders --disable-muxers --disable-devices --disable-protocols --enable-protocol=file --enable-avfilter --disable-network --disable-mpegaudio-hp --disable-avdevice --enable-cross-compile --cc=$PREBUILT/bin/arm-eabi-gcc --cross-prefix=$PREBUILT/bin/arm-eabi- --nm=$PREBUILT/bin/arm-eabi-nm --extra-cflags="-fPIC -DANDROID" --disable-asm --enable-neon --enable-armv5te --extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"3、修改configure文件,找到下图的内容,修改成我这样,这个是用来存放执行脚本过程的临时文件的,我这里用的是D://NDK,你可以设置其他地方,但是要先创建好这个文件夹,放哪里无所谓的。4、然后在cywin中进入ffmpeg0.6.6文件夹,执行chmod -x config.sh,然后执行./config,此过程需要一定的时间。如果这一步出现问题,很有可能是你config.sh中的PREBUILT和PLATFORM的路径设置不对,或者是你拷贝内容到config.sh的时候没有在UNIX格式下。执行完如下图所示。5、在ffmpeg-0.6.6下会生成一个config.h文件,编辑它,找到#define restrict restrict这一行,把它改成#define restrict6、在libavutil/libm.h下,把所有static的方法注释掉或者直接删掉。7、修改libavcodec,libavfilter,libavformat,libavutil,libpostproc和libswscale目录的MakeFile文件,每个文件中,删除语句include $( SUBDIR ) ../config.mak 和 include $ (SUBDIR) .. / subdir.mak。libavcodec下的makefile中搜索inverse.o,把它所在的那一行删掉,要不编译的时候会冲突。8、在ffmpeg-0.6.6文件夹下,创建av.mk文件(UNIX格式),内容如下:#LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).makinclude $(LOCAL_PATH)/../config.makOBJS :=OBJS-yes :=MMX-OBJS-yes :=include $(LOCAL_PATH)/Makefile# collect objectsOBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)OBJS += $(OBJS-yes)FFNAME := lib$(NAME)FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))FFCFLAGS = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-signFFCFLAGS += -DTARGET_CONFIG="config-$(TARGET_ARCH).h"ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))ifneq ($(ALL_S_FILES),)ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))elseC_OBJS := $(OBJS)S_OBJS :=endifC_FILES := $(patsubst %.o,%.c,$(C_OBJS))S_FILES := $(patsubst %.o,%.S,$(S_OBJS))FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))9、在jni文件夹下,创建Android.mk(UNIX格式),内容如下:include $(all-subdir-makefiles)10、在ffmpeg-0.6.6文件夹下,创建Android.mk,内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscaleLOCAL_MODULE := ffmpeginclude $(BUILD_SHARED_LIBRARY)include $(call all-makefiles-under,$(LOCAL_PATH))11、在ffmpeg-0.6.6libavformat下,创建Android.mk,内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)include $(LOCAL_PATH)/../av.mkLOCAL_SRC_FILES := $(FFFILES)LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/..LOCAL_CFLAGS += $(FFCFLAGS)LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindexLOCAL_LDLIBS := -lzLOCAL_STATIC_LIBRARIES := $(FFLIBS)LOCAL_MODULE := $(FFNAME)include $(BUILD_STATIC_LIBRARY)12、在ffmpeg-0.6.6libavcodec下,创建Android.mk,内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)include $(LOCAL_PATH)/../av.mkLOCAL_SRC_FILES := $(FFFILES)LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/..LOCAL_CFLAGS += $(FFCFLAGS)LOCAL_LDLIBS := -lzLOCAL_STATIC_LIBRARIES := $(FFLIBS)LOCAL_MODULE := $(FFNAME)include $(BUILD_STATIC_LIBRARY)13、在ffmpeg-0.6.6libavfilter、libavutil、libpostproc和libswscale下,创建Android.mk,内容如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)include $(LOCAL_PATH)/../av.mkLOCAL_SRC_FILES := $(FFFILES)LOCAL_C_INCLUDES := $(LOCAL_PATH) $(LOCAL_PATH)/..LOCAL_CFLAGS += $(FFCFLAGS)LOCAL_STATIC_LIBRARIES := $(FFLIBS)LOCAL_MODULE := $(FFNAME)include $(BUILD_STATIC_LIBRARY)14、然后在jni目录下,运行$NDK_R4/ndk-build -B,这里的命令需要根据你自己的情况修改,然后就开始编译了。过程需要10来分钟,成功之后,会在libs下生产libffmpeg.so。如果编译出来的libffmpeg.so只有1.5k,得如下修改一下NDK,再重新编译。把下面红色部分加到NDK的build/core/build-binary.mk里:LOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))LOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))...static_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))static_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))...$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))...$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)...$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)接着再将最外层ffmpeg/Android.mk里面的LOCAL_STATIC_LIBRARIES改成LOCAL_STATIC_WHOLE_LIBRARIES
2023-07-16 05:06:401

如何使用ContentResolver

  contentresolver:  内容解析器  使用方法:  这个类主要是Android用来实现应用程序之间数据共享的  一个应用程序可以将自己的数据完全暴露出去,外界更本看不到,也不用看到这个应用程序暴露的数据是如何存储的,或者是使用数据库还是使用文件,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道,例如:添加(insert)、删除(delete)、查询(query)、修改(update),当然需要一定的权限才可以。  一个程序可以通过实现一个Content provider的抽象接口将自己的数据完全暴露出去,而且Content providers是以类似数据库中表的方式将数据暴露。Content providers存储和检索数据,通过它可以让所有的应用程序访问到,这也是应用程序之间唯一共享数据的方法。  要想使应用程序的数据公开化,可通过2种 方法:  1)创建一个属于你自己的Content provider  2)将你的数据添加到一个已经存在的Content provider中,前提是有相同数据类型并且有写入Content provider的权限  如果想公开自己的数据,那么可有两种办法:1.创建自己的ContentProvider,需要继承ContentProvider类2.如果你的数据和已存在的ContentProvider数据结构一致,可以将数据写到已存在的ContentProvider中 当然前提是获取写该ContentProvider的权限.比如把OA中的成员通讯信息加入到系统的联系人ContentProvider中ContentProvider基础所有ContentProvider都需要实现相同的接口,用于查询ContentProvider并返回数据.也包括增加、修改和删除数据.步骤:1.获得一个ContentResolver的实例,可通过Activity的成员方法getContentResovler()方法:ContentResolver cr = this.getContentResolver();ContentResolver实例带的方法可实现找到指定的ContentProvider并获取到ContentProvider的数据ContentResolver的查询过程开始,Android系统将确定查询所需的具体ContentProvider,确认它是否启动并运行它.android系统负责初始化所有的ContentProvider,不需要用户自己去创建.实际上,ContentProvider的用户都不可能直接访问到ContentProvider实例,只能通过ContentResolver在中间代理.2.数据模型ContentProvider展示数据类似一个单个数据库表.其中:每行有个带唯一值的数字字段,名为_ID,可用于对表中指定记录的定位.ContentProvider返回的数据结构,是类似JDBC的ResultSet,在android中,是Cursor对象.URI,每个ContentProvider定义一个唯一的公开的URI,用于指定到它的数据集.一个ContentProvider可以包含多个数据集(可以看作多张表),这样,就需要有多个URI与每个数据集对应.这些URI要以这样的格式开头:content://表示这个URI指定一个ContentProvider.如果你想创建自己的ContentProvider,最好把自定义的URI设置为类的常量,这样简化别人的调用,并且以后如果更新URI也很容易.android定义了CONTENT_URI常量用于URI,如:android.provider.Contacts.Phones.CONTENT_URI2.查询ContentProvider要想使用一个ContentProvider,需要以下信息:定义这个ContentProvider的URI,返回结果的字段名称,这些字段的数据类型如果需要查询ContentProvider数据集的特定记录(行),还需要知道该记录的ID的值.构建查询查询就是输入URI等参数,其中URI是必须的,其他是可选的,如果系统能找到URI对应的ContentProvider将返回一个Cursor对象.可以通过ContentResolver.query()或者Activity.managedQuery()方法.两者的方法参数完全一样,查询过程和返回值也是相同的.区别是,通过Activity.managedQuery()方法,不但获取到Cursor对象,而且能够管理Cursor对象的生命周期.比如当Activity暂停(pause)的时候,卸载该Cursor对象,当Activity Restart的时候重新查询.另外,也可以对一个没有处于Activity管理的Cursor对象做成被Activity管理的,通过调用Activity.startManaginCursor()方法.类似这样:Cursor cur = managedQuery(myPerson,null,null,null,null);其中第一个参数myPerson是Uri类型实例.如果需要查询的是指定行的记录,需要用_ID值,比如ID值为23,URI将是类似:content://....../23android提供了方便的方法,让开发者不需要自己拼接上面这样的URI,比如类似:Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI,23);或者:Uri myPerson = Uri.withAppendedPath(People.CONTENT_URI,"23");二者的区别是一个接收整数类型的ID值,一个接收字符串类型.其他几个参数:names,可以为null,表示取数据集的全部列,或者声明一个String数组,数组中存放列名称,比如:People._ID.一般列名都在该ContentProvider中有常量对应;针对返回结果的过滤器,格式类似于SQL中的WHERE子句,区别是不带WHERE关键字,如果返回null表示不过滤,比如name=?;前面过滤器的参数,是String数组,是针对前面条件中?占位符的值;排序参数,类似SQL的ORDER BY字句,不过不需要写ORDER BY部分,比如name desc,如果不排序,可输入null.返回值是Cursor对象,游标位置在第一条记录之前.下面实例适用于android 2.0及以上版本,从android通讯录中得到姓名字段:java代码:Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);读取返回的数据如果在查询的时候使用到ID,那么返回的数据只有一条记录.在其他情况下,一般会有多条记录.和JDBC的ResultSet类似,需要操作游标遍历结果集,在每行,再通过列名获取到列的值,可以通过getString()、getInt()、getFloat()等方法获取值.比如类似下面:java代码:while(cursor.moveToNext()) { builder.append(cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))).append("-");}和JDBC中不同,没有直接通过列名获取列值的方法,只能先列名获取到列的整型索引值,然后再通过该索引值定位获取列的值.编辑数据可以通过ContentProvider实现以下编辑功能:增加新的记录:在已经存在的记录中增加新的值、批量更新已经存在的多个记录、删除记录.所有的编辑功能都是通过ContentResolver的方法实现.一些ContentProvider对权限要求更严格一些,需要写的权限,如果没有会报错.增加记录要想增加记录到ContentProvider,首先,要在ContentValues对象中设置类似map的键值对,在这里,键的值对应ContentProvider中的列的名字,键值对的值,是对应列希望的类型.然后,调用ContentResolver.insert()方法,传入这个ContentValues对象,和对应ContentProvider的URI即可.返回值是这个新记录的URI对象.这样你可以通过这个URI获得包含这条记录的Cursor对象.比如:java代码:ContentValues values = new ContentValues();values.put(People.NAME,"Abraham Lincoln");Uri uri = getContentResolver().insert(People.CONTENT_URI, values);在原有记录上增加值如果记录已经存在,可在记录上增加新的值,或者编辑已经存在的值.首先要找到原来的值对象,然后要清除原有的值,然后像上面增加记录一样即可:java代码:Uri uri = Uri.withAppendedPath(People.CONTENT_URI, "23");Uri phoneUri = Uri.withAppendedPath(uri, People.Phones.CONTENT_DIRECTORY);values.clear();values.put(People.Phones.TYPE, People.Phones.TYPE_MOBILE);values.put(People.Phones.NUMBER, "1233214567");getContentResolver().insert(phoneUri, values);批量更新值批量更新一组记录的值,比如NY改名为Eew York.可调用ContentResolver.update()方法.删除记录如果是删除单个记录,调用ContentResolver.delete()方法,URI参数,指定到具体行即可.如果是删除多个记录,调用ContentResolver.delete()方法,URI参数指定Contentprovider即可,并带一个类似SQL的WHERE子句条件.这里和上面类似,不带WHERE关键字.创建自己的ContentProvider创建contentprovider,需要设置存储系统.大多数ContentProvider使用文件或者SQLite数据库,不过你可以用任何方式存储数据.android提供SQLiteOpenHelper帮助开发者创建和管理SQLiteDatabase.继承ContentProvider,提供对数据的访问.在manifest文件中声明ContentProvider.继承ContentProvider类必须定义ContentProvider类的子类,需要实现如下方法:java代码:query()insert()update()delete()getType()onCreate()在实现子类的时候,还有一些步骤可以简化ContentProvider客户端的使用:定义public static final Uri常量,名称为CONTENT_URI:java代码:public static final Uri CONTENT_URI = Uri.parse("content://com.example.codelab.transportationprovider");如果有多个表,它们也是使用相同的CONTENT_URI,只是它们的路径部分不同.声明ContentProvider创建ContentProvider后,需要在manifest文件中声明,android系统才能知道它,当其他应用需要调用该ContentProvider时才能创建或者调用它.语法类似:<provider android:name="com.easymorse.cp.MyContentProvider" android:authorities="com.easymorse.cp.mycp"></provider>android:name要写ContentProvider继承类的全名.android:authorities要写和CONTENT_URI常量的B部分参考网址:http://zhidao.baidu.com/question/553233960796925492.html
2023-07-16 05:06:503

eclipse不执行新代码

试试把classes下的文件删了,然后重新生成
2023-07-16 05:07:112

datatables 导出复杂表头的excel

toExcel: function (id) { $("#" + id).dataTable({ "bJQueryUI": false, "bPaginate": false, //是否分页 "bRetrieve": false, //是否允许从新生成表格 "bInfo": false, //显示表格的相关信息 "bDestroy": true, "bServerSide": false, "bProcessing": true, //当处理大量数据时,显示进度,进度条等 "bFilter": false, //搜索框 "bLengthChange": false, //动态指定分页后每页显示的记录数 "bSort": false, //排序 "bStateSave": false, //缓存 "sAjaxDataProp": "data", "sDom": "T<"clear">lfrtip" "oTableTools": { "sSwfPath": "DataTables-1.9.4/extras/TableTools/media/swf/copy_csv_xls_pdf.swf" } } ); }
2023-07-16 05:07:201

ndk-Android NDk 怎么编译时动态链接第三方so库,有头文件

问题描述:Android如何调用第三方SO库;已知条件:SO库为Android版本连接库(*.so文件),并提供了详细的接口说明;已了解解决方案:1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;求解:1.上面两种方案是否可行?不可行的话存在什么问题?2.两种方案有什么区别?为什么网上大部都是用的第二种方案?3.只有一个*.so文件,并提供了详细的接口说明,是否可在ANDROID中使用它?首先要看这个SO是不是JNI规范的SO,比如有没有返回JNI不直接支持的类型。也就是说这个SO是不是可以直接当作JNI来调用。如果答案是否定的,你只能选第二个方案。如果答案是肯定的,还要看你是不是希望这个SO的库直接暴露给JAVA层,如果答案是否定的,你只能选第二个方案,比如你本身也是一个库的提供者。一般如果你只有SO,就说明这个是别人提供给你的,你可以要求对方给你提供配套的JAVA调用文件。1、这个要看这个SO是不是符合JNI调用的规范。还要看你自己的意愿。2、因为第二种方法最灵活,各种情况都可以实现。3、可以看能不能直接从JAVA调用的最简单的方法就是看SO里的函数名是不是Java_XXX_XXX_XXX格式的是就可以,你可以自己写一个配套的JAVA文件,注意一下SO函数名和JAVA函数名的转换规则,或者向SO提供方索要;不是的话就选第二种方案吧。1、检查所需文件是否齐全使用第三方动态库,应该至少有2个文件,一个是动态库(.so),另一个是包含动态库API声明的头文件(.h)2、封装原动态库原动态库文件不包含jni接口需要的信息,所以我们需要对其进行封装,所以我们的需求是:将libadd.so 里面的API封装成带jni接口的动态3、编写库的封装函数libaddjni.c根据前面生成的com_android_libjni_LibJavaHeader.h 文件,编写libaddjni.c,用来生成libaddjni.soAndroid中集成第三方软件包(.jar, .so)Android中可能会用到第三方的软件包,这包括Java包.jar和Native包.so。jar包既可通过Eclipse开发环境集成,也可通过编译源码集成,看你的工作环境。假定自己开发的程序为MyMaps,需要用到BaiduMaps的库,包括baidumapapi.jar和libBMapApiEngine_v1_3_1.so。一、Eclipse中集成第三方jar包及.so动态库MyMaps工程下创建目录libs以及libs/armeabi,把baidumapapi.jar放在的libs/目录下,把libBMapApiEngine_v1_3_1.so放在libs/armeabi/下。Eclipse中把第三方jar包baidumapapi.jar打包到MyMaps的步骤:1. 右击工程,选择Properties;2. Java Build Path,选择Libraries;3. Libraries页面点击右面按钮“Add Library…”;4. 选择“User Library”,点击“Next”;5. 点击“User Libraries”按钮;6. 在弹出界面中,点击“New…”;7. 输入“User library name”,点击“OK”确认;8. 返回之后,选择刚刚创建的User library,右面点击“AddJARs”;9. 选择MyMaps/libs/下的baidumapapi.jar;10. 确认,返回。这样,编译之后,该jar包就会被打进MyMaps.apk中,libBMapApiEngine_v1_3_1.so也被打包在lib/armeabi/中。程序运行过程中,libBMapApiEngine_v1_3_1.so被放在/data/data/<yourAppPackage>/lib/下,加载动态库时系统会从程序的该lib/目录下查找.so库。二、源码中集成第三方集成jar包及.so动态库Android源码中MyMaps放在packages/apps下。MyMaps下创建目录libs以及libs/armeabi,并把baidumapapi.jar放在libs/,把libBMapApiEngine_v1_3_1.so放在libs/armeabi。2.1 修改Android.mk文件Android.mk文件如下:[plain] view plaincopyLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_STATIC_JAVA_LIBRARIES := libbaidumapapiLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := MyMapsinclude $(BUILD_PACKAGE)##################################################include $(CLEAR_VARS)LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=libbaidumapapi:libs/baidumapapi.jarLOCAL_PREBUILT_LIBS :=libBMapApiEngine_v1_3_1:libs/armeabi/libBMapApiEngine_v1_3_1.soLOCAL_MODULE_TAGS := optionalinclude $(BUILD_MULTI_PREBUILT)# Use the following include to make our testapk.include $(callall-makefiles-under,$(LOCAL_PATH))1 集成jar包LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES指定prebuiltjar库的规则,格式:别名:jar文件路径。注意:别名一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;jar文件路径一定要是真实的存放第三方jar包的路径。编译用BUILD_MULTI_PREBUILT。2 集成.so动态库LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。编译拷贝用BUILD_MULTI_PREBUILT。2.2 加入到GRANDFATHERED_USER_MODULES在文件user_tags.mk中,把libBMapApiEngine_v1_3_1加入到GRANDFATHERED_USER_MODULES中[plain] view plaincopyGRANDFATHERED_USER_MODULES += … libBMapApiEngine_v1_3_1user_tags.mk可以是build/core下的,也可以是$(TARGET_DEVICE_DIR)下的,推荐修改$(TARGET_DEVICE_DIR)下的。2.3 编译结果MyMaps.apk编译生成在out/target/product/<YourProduct>/system/app/下;libBMapApiEngine_v1_3_1.so放在out/target/product/<YourProduct>/system/lib/下,这也是系统加载动态库时搜索的路径。
2023-07-16 05:07:351