Android Stduio 使用说明.docx
- 文档编号:10339052
- 上传时间:2023-02-10
- 格式:DOCX
- 页数:18
- 大小:840.45KB
Android Stduio 使用说明.docx
《Android Stduio 使用说明.docx》由会员分享,可在线阅读,更多相关《Android Stduio 使用说明.docx(18页珍藏版)》请在冰豆网上搜索。
AndroidStduio使用说明
Androidstudio
安装之后
如果已经有代码选择Importproject(Eclipse……)
注意工程目录不要含有中文字符。
安装好之后启动adb:
Adb的目录在
将“C:
\Users\Administrator\AppData\Local\Android\sdk\platform-tools”添加至环境变量
在运行中cmd,调用命令操作窗口。
进入后输入adb查看运行结果。
响应命令则成功。
编译
报错--Errorrunningapp:
DefaultActivitynotfound
修改启动launch为nothing即可。
报错—找不到符号
A.添加jar包解决一部分找不到符号的问题
修改方法:
B.添加下图SDK的jar包,注意路径
重新命名后添加:
优先编译依赖:
gradle.projectsEvaluated{
tasks.withType(JavaCompile){
pilerArgs.add('-Xbootclasspath/p:
app\\libs\\framework.jar')
}
}
C.剩下的错误还有2个如下图:
错误1是由于不同平台导入的difference.java是不一样的,修改用对应的,本文采用Difference.java_HI3798MV100来覆盖Difference.java
D.
新建一个build文件夹,给一个路径
成功:
Adb相关
运行报错:
查看5037端口是否被占用:
其中端口状态有:
LISTENING表示侦听状态、ESTABLISHED表示建立连接,CLOSE_WAIT对方主动关闭连接或者网络异常导致连接中断,TIME_WAIT我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。
终止后后台还是有adb启动,导致被占用,最终发现是浏览器占用,修改端口或去掉浏览器的adb都可。
机顶盒端设置IP:
通过adbconnect192.168.30.68连接,
在androidstudio中可以发现已经连接上设备了:
Androidstudio调试
编译成功后,采用adb安装到机顶盒运行,出现错误:
原因是后门在system里面有一个预制apk
1.mount-oremount,rw/system---获取system写权限
2.给apk换个名字就找不到了~
3.删除data下面的参数
签名:
1.assign文件夹中执行sign.sh文件,主要为命令行:
sourcekeytool-importkeypair-ktest.jks-p123456-pk8platform.pk8-certplatform.x509.pem-aliasjz
其中test.jks是生成签名文件,相关信息要与androidstudio、代码中一致
内容一致,
代码(app下的build.gradle文件):
signingConfigs{
release{
storeFilefile("./test.jks")
storePassword'123456'
keyAlias'jz'
keyPassword'123456'
}
debug{
storeFilefile("./test.jks")
storePassword'123456'
keyAlias'jz'
keyPassword'123456'
}
}
android.applicationVariants.all{variant->
variant.outputs.each{output->
output.outputFile=newFile("Jzfactory.apk");
}
}
签名完成:
其中:
手动添加签名命令为
java-jarsignapk.jarplatform.x509.pemplatform.pk8input.apkoutput.apk
删除apk:
启动相关
amstart-ncom.jzbyapp.jzfactory/.MainActivityU
pmenablecom.jzbyapp.jzfactory
SDK环境
IPTV基线使用Hisi3798MV200android4.4版本,基线SDK名称:
HiSTBAndroidV600R003C01Patch01
1.解压HiSTBAndroidV600R003C01SPC010.tar.gz
Tar–vxfHiSTBAndroidV600R003C01SPC010.tar.gz
2.补丁:
解压testpatch_for_3798mv200_spc010_20170217_unicom_001.tar.gz,将其中的new文件夹覆盖步骤1中SDK基线的目录
3.打后门补丁,
4.配置配置环境变量
与实际编译环境一致
5编译SDK(sourcebuild/envsetup.sh,lunchHi3798CV200-eng;更新api,makeupdate-api
;完整编译makebigfish-j322>&1|teebigfish.log)
编译成功。
SDK下编译后门apk
1.环境配置
2.进入具体的代码目录后,mm–B编译,生成apk文件。
调试
1)编译错误
xmlns:
custom="
2)生成签名apk,并指定生成apk的名字,修改app/build.gradle
android{
signingConfigs{
release{
storeFilefile("./JZSign.jks")
storePassword'123456'
keyAlias'release'
keyPassword'123456'
}
}
android.applicationVariants.all{variant->
variant.outputs.each{output->
output.outputFile=newFile("NGB_Search.apk");
}
}
}
3)优先编译依赖,修改工程根目录下build.gradle
allprojects{
gradle.projectsEvaluated{
tasks.withType(JavaCompile){
pilerArgs.add('-Xbootclasspath/p:
libs\\frame.jar')
}
}
}
4)编译依赖库添加,注意compile和provided区别,修改app/build.gradle
dependencies{
providedfiles('E:
/StudioProjects/JzFactory/libs/frame.jar')
providedfiles('E:
/StudioProjects/JzFactory/libs/ngbj.jar')
}
5)汉化
6)生成签名apk,修改app/build.gradle
JAVA知识点
在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!
,被KILL掉了,,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanceState的作用。
当一个Activity在PAUSE时,被kill之前,它可以调用onSaveInstanceState()来保存当前activity的状态信息(在paused状态时,要被KILLED的时候)。
用来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState()andonCreate().
•super关键字也有两种意义:
–调用父类的方法–调用父类的构造器•但是,super并不表示一个指向对象的引用,它只是一个特殊的关键字,用来告诉编译器,现在要调用的是父类的方法。
this变量代表对象本身。
AndroidManifest.xml是Android应用的入口文件,它描述了package中暴露的组件(activities,services,等等),他们各自的实现类,各种能被处理的数据和启动位置。
除了能声明程序中的Activities,ContentProviders,Services,和IntentReceivers,还能指定permissions和instrumentation(安全控制和测试)。
Activity有四种加载模式:
standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard
standard:
就是intent将发送给新的实例,所以每次跳转都会生成新的activity。
singleTop:
也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:
和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。
如果有直接将intent发送给它。
singleInstance:
首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。
比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。
那如果在多个task中共享一个Activity的话怎么办呢。
举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。
singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。
当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效
Service:
【1】service与activity同级,与activity不同的是,它不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。
比如听音乐,网络下载数据等,都是由service运行的
【2】service生命周期:
Service只继承了onCreate(),onStart(),onDestroy()三个方法,第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法
【3】service与activity间的通信
Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),Activity与service间的通信主要用IBinder负责。
一.Intent的介绍
Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。
因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。
二.Inten启动组件的方法
Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcasts。
具体方法如下:
组件名称
方法名称
Activity
startActvity()
startActivity()
Service
startService()
bindService()
Broadcasts
sendBroadcasts()
sendOrderedBroadcasts()
sendStickyBroadcasts()
三.Intent的属性
Intent有以下几个属性:
动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。
其中最常用的是Action属性和Data属性。
Constant
Targetcomponent
Action
ACTION_CALL
activity
Initiateaphonecall.
ACTION_EDIT
activity
Displaydatafortheusertoedit.
ACTION_MAIN
activity
Startupastheinitialactivityofatask,withnodatainputandnoreturnedoutput.
ACTION_SYNC
activity
Synchronizedataonaserverwithdataonthemobiledevice.
ACTION_BATTERY_LOW
broadcastreceiver
Awarningthatthebatteryislow.
ACTION_HEADSET_PLUG
broadcastreceiver
Aheadsethasbeenpluggedintothedevice,orunpluggedfromit.
ACTION_SCREEN_ON
broadcastreceiver
Thescreenhasbeenturnedon.
ACTION_TIMEZONE_CHANGED
broadcastreceiver
Thesettingforthetimezonehaschanged.
安卓四大组件
一、Activity详解
二、Service详解
三、BroadcastReceiver详解
四、ContentProvider详解
外加一个重要组件intent的详解。
catch(Exceptione)异常处理
Handler
一、Handler的定义:
主要接受子线程发送的数据,并用此数据配合主线程更新UI。
解释:
当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发,比如说,你要是点击一个Button,Android会分发事件到Button上,来响应你的操作。
如果此时需要一个耗时的操作,例如:
联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示"强制关闭"。
这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。
这个时候,Handler就出现了。
,来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。
二、Handler一些特点
handler可以分发Message对象和Runnable对象到主线程中,每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),它有两个作用:
(1)安排消息或Runnable在某个主线程中某个地方执行;
(2)安排一个动作在不同的线程中执行。
Handler中分发消息的一些方法
post(Runnable)
postAtTime(Runnable,long)
postDelayed(Runnablelong)
sendEmptyMessage(int)
sendMessage(Message)
sendMessageAtTime(Message,long)
sendMessageDelayed(Message,long)
以上post类方法允许你排列一个Runnable对象到主线程队列中,
sendMessage类方法,允许你安排一个带数据的Message对象到队列中,等待更新。
子类需要继承Hendler类,并重写handleMessage(Messagemsg)方法,用于接受线程数据。
Runnable和Thread的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。
一个类只要继承了Thread类同时覆写了本类中的run()方法就可以实现多线程操作了,但是一个类只能继承一个父类,这是此方法的局限。
Q:
图标?
啥意思
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android Stduio 使用说明