问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android SDK下各目录的用途,以及在不同系统下哪些是通用的

发布网友 发布时间:2022-04-23 02:43

我来回答

3个回答

懂视网 时间:2022-04-30 14:33

什么是aapt?

执行命令: C:UsersXiaopeng>aapt

Android Asset Packaging Tool

1、列出apk包的内容

aapt l[ist] [-v] [-a] file.{zip,jar,apk}

注:filepath是apk存放的路径

 aapt l -v filepath/..apk:以table的形式列出来(不过我用起来老是出,win7和xp都一样,大家可以试一下)

技术分享

 aapt l -a filepath/..apk:详细的列出apk的内容

技术分享

 由于内容太多,我们把内容都存放到txt文件里,打开查看

技术分享

  aapt l filepath/..apk:查看apk内容

  由于内容太多,我们把内容都存放到txt文件里,打开查看

技术分享

 对比一下可以看出,aapt l -a filepath/..apk 显示的apk内容更详细。

 2、查看apk的一些信息

 aapt d[ump] [--values] WHAT file.{apk} [asset [asset ...]]
        badging          Print the label and icon for the app declared in APK.
        permissions      Print the permissions from the APK.
        resources        Print the resource table from the APK.
        configurations   Print the configurations in the APK.
        xmltree          Print the compiled xmls in the given assets.
        xmlstrings       Print the strings of the given compiled xml assets.

 

 aapt d badging filepath/..apk :显示标签、图标和应用程序的相关描述。

(这个命令很有用啊,我写过一个自动化更新下载的程序,就用到这个命令来校验应用的包名、版本和权限)

技术分享

aapt d permissions filepath/..apk :显示apk所具有的系统权限

aapt d badging filepath/..apk : 显示apk的资源列表  (很多内容,如果想看最好还是转到txt里面查看吧)

aapt d configurations filepath/..apk : 显示apk的配置信息   

aapt d xmltree filepath/..apk  xmlname :  以树型显示apk中某个xml文件

例:以树型显示QQapk中 AndroidManifest.xml文件

技术分享

aapt d xmlstrings filepath/..apk  xmlname :  显示apk中某个xml文件中所有的字符

例:显示QQapk中 AndroidManifest.xml中的字符

技术分享

3、编译android资源

aapt p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml]
        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile]
        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL]
        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL]
        [--rename-manifest-package PACKAGE]
        [--rename-instrumentation-target-package PACKAGE]
        [--utf16] [--auto-add-overlay]
        [--max-res-version VAL]
        [-I base-package [-I base-package ...]]
        [-A asset-source-dir]  [-G class-list-file] [-P public-definitions-file]
        [-S resource-sources [-S resource-sources ...]]
        [-F apk-file] [-J R-file-dir]
        [--product product1,product2,...]
        [-c CONFIGS] [--preferred-configurations CONFIGS]
        [-o]
        [raw-files-dir [raw-files-dir] ...]

 

解释:

-f    如果编译出来的文件已经存在,强制覆盖
-m  使生成的包的目录存放在-J参数指定的目录
-J    指定生成的R.java 的输出目录 
-S    res文件夹路径
-A    assert文件夹路径
-I     某个版本平台的android.jar的路径
-F    具体指定APK文件的输出

实例:

一.将工程的资源编译到R.java文件

aapt package -m -J <R.java文件夹> -S <res路径> -I <android.jar路径> -M<AndroidManifest.xml路径>

实例:

1.cmd -- 定位到android源文件目录,如: cd  E:wirelessqahi ---  根据上面给出的命令套进去

<R.java文件夹> :gencomperf
<res路径>: res
<android.jar路径> :    
E:Softwareandroid-sdk-windows-1.6_r1platformsandroid-1.6android.jar  这个要看你apk对应支持的android版本

这里有很多,找到对应的

技术分享

 <AndroidManifest.xml路径>: AndroidManifest.xml

 OK,执行命令:

 aapt p -f -m -J gencomperf -S res -I E:Softwareandroid-sdk-windows-1.6_r1platformsandroid-1.6android.jar -M AndroidManifest.xml

二.将工程的资源编译到一个APK包里

aapt package -f -S <res路径> -I <android.jar路径> -A <assert路径> -M <AndroidManifest.xml路径> -F <输出的包目录+包名>

实例:

1.cmd -- 定位到android源文件目录,如: cd  E:wirelessqahi ---  根据上面给出的命令套进去

<res路径>: res
<android.jar路径>:
E:Softwareandroid-sdk-windows-1.6_r1platformsandroid-1.6android.jar
<assert路径> :assets

<AndroidManifest.xml路径>: 当前目录下的 AndroidManifest.xml
<输出的包目录+包名>: 当前目录下 hi.apk

OK,执行命令:

aapt p -f -S res -I E:Softwareandroid-sdk-windows-1.6_r1platformsandroid-1.6android.jar -A assets -M AndroidManifest.xml -F hi.apk

4. 移除打包好的apk中的文件

aapt r[emove] [-v] file.{zip,jar,apk} file1 [file2 ...]

实例:将apk中的某个文件移除掉    

命令:aapt r <你的apk文件路径> <想要移除的文件名>

技术分享

先从hi.apk除除AndroidManifest.xml文件,再尝试去显示,结果无法找到,证明我们已经移除成功。

5.添加文件到打包好的apk中

aapt a[dd] [-v] file.{zip,jar,apk} file1 [file2 ...]

实例:将文件添加到打包好的apk文件中   

命令:aapt a <你的apk文件路径> <想要添加的文件路径>

技术分享

在这里我遇到一个问题,添加文件成功之后再去尝试显示文件,结果提示文件损坏,至于是什么问题我还不知道,如果大家谁知道可以告诉我一下。

6. PNG文件预处理

aapt c[runch] [-v] -S resource-sources ... -C output-folder ...        做PNG文件的预处理,并将结果存储到一个文件夹中

实例: aapt c -S <res路径> -C <想存放的文件夹路径>

技术分享

结果:

技术分享

7.显示aapt版本

aapt v[ersion]

技术分享

  *******************************************************************  

Android ADB详解

ADB全称Android Debug Bridge,是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器戒者真实的andriod设备它的主要功能有: 运行设备的shell(命令行)
管理模拟器戒设备的端口映射
计算机和设备之间上传/下载文件
将本地apk软件安装至模拟器戒android设备 ADB是一个“客户端-服务器端”程序,其中客户端就是用杢操作的电脑,服务器端是android设备,实体机器戒者虚拟机。 【安装调试】
在此,需要用到的软件有:
1、android_usb_windows,设备连接电脑的驱劢包
2、ADB的工具包戒者整个SDK,adb操作的工具软件
驱劢的安装在此就丌说了,驱劢安全成功后的信息应该是这样的:
如果下载的是ADB工具包,需要做的叧是将“adb.exe”和“AdbWinApi.dll”两个文件放到“C:WindowsSystem32”里即可。想知道有没有成功,可以这样操作:
1、在搜索框输入CMD,进入DOS界面
2、输入adb,如果可以的话,可以出现一大堆的东西
至此,ADB的安装就成功了,我们继续杢看看ADB常用的命令。
【常用命令详解】
1、查看设备情况
adb devices
这个命令是查看当前连接的设备, 连接到计算机的android设备戒者模拟器将会列出显示。该命令返回的结果为连接至开发机的android设备序列号及状态。序列号用于唯一标示一台android设备,通常为<设备名称>-<端口号>;状态具有如下两种:
Offline——设备没有连接到开发机戒无响应;
Device——设备已经连接到开发机。注意,该状态并丌表示android设备可用,当android设备处于启劢阶段时,若连接成功也会返回该状态。
如前所述adb首先会启劢server,该server使用5037端口进行监听,并尝试使用5555~5585端口连接Android设备/模拟器。当多台
4 / 14
android设备连接至同一开发机时,需要使用-s <序列号> 区分设备进行操作。
2、安装软件
adb install <apk文件路径>
这个命令将指定的apk文件安装到设备上。
如下图所示,我们可以先进入到软件所在的文件夹,这里在C盘下建立了个adb文件夹,里面有个APK名为autokiller,我们使用install命令杢操作:
5 / 14
adb install –r
这句命令就是重新安装该软件的意思。
3、卸载软件
adb uninstall <软件名>
adb uninstall -k <软件名>
如果加 -k 参数,为卸载软件但是保留配置和缓存文件.
4、进入设备或模拟器的shell
adb shell
6 / 14
通过上面的命令,就可以进入设备戒模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux的命令,另外如果叧想执行一条shell命令,可以采用以下的方式:
adb shell [command]
如:adb shell dmesg就会打印出内核的调试信息。
5、发布端口
可以设置任意的端口号,做为主机向模拟器戒设备的请求端口。如:
adb forward tcp:5555 tcp:8000
6、从电脑上发送文件到设备
adb push <本地路径> <远程路径>
用push命令可以把本机电脑上的文件戒者文件夹复制到设备(手机),此处的本地就是指电脑,远程就是指手机戒者模拟器。
此处需要注意的是,电脑上的路径是“C:”,手机上的是“/sdcard/”这样的,两处的斜杠方向丌同。   7、从设备上下载文件到电脑
adb pull <远程路径> <本地路径>
用pull命令可以把设备(手机)上的文件戒者文件夹复制到本机电脑中。因为不命令6类似,此处丌再重复。     8、查看bug报告
adb bugreport   9、在adb shell下可查看手机系统的具体命令 ? getprop:查看机器的全部信息参数,在这能看到你机器的全部信息参数,从你的硬件信息到所刷的ROM版本信息。 ? getprop ro.serialno 查看机器的SN号 从图中可以看出,其实SN号在getprop的命令中已经获取了,才命令指示getprop的一个子部分而已,下面的命令相同。
getprop ro.carrier 查看机器的CID号 ? getprop ro.hardware 查看机器板子代号,可以看到G7的开发代号名为bravo! ? getprop ro.bootloader 查看SPL(Hboot)版本号
10、ubuntu使用时出现的问题
在使用ubuntu时发现如下问题:使用adb devices丌能发现已经连接的android设备。产生该问题的原因在于adb命令首次运行时会启劢一个server守护进程,用于不android 设备的交互。由于ubuntu的权限问题导致该守护进程无法访问设备。因此可以以如下方式解决(注意,需将adb设置入root环境变量戒者使用全路径):
sudo adb start-server
显示守护进程启劢成功后再以adb XXX进行使用即可,丌再使用adb时可以通过
sudo adb kill-server
结束守护进程。

11、使用adb进行recovery的过程
adb shell <command> - 让手机执行命令,<command>就是手机执行的命令。如:
adb shell flash_image recovery /sd-card/recovery-RAv1.0G.img,执行将recovery-RAv1.0G.img写入到recovery 区中。
我们刷recovery时一般按下顺序执行:
adb shell mount –a
adb push recovery-RAv1.0G.img /system/recovery.img
adb push recovery-RAv1.0G.img /sdcard/recovery-RAv1.0G.img
adb shell flash_image recovery /sdcard/recovery-RAv1.0G.img reboot
【ADB命令列表】
Adb命令详表
C:Usersmilk>adb
Android Debug Bridge version 1.0.20
-d - directs command to the only connected USB device. returns an error if more than one USB device is present.
-e - directs command to the only running emulator, returns an error if more than one emulator is running.
-s <serial number> - directs command to the USB device or emulator with the given serial number
-p <product name or path> - simple product name like ‘sooner‘, or a relative/absolute path to a product out directory like ‘out/target/product/sooner‘. If -p is not specified, the ANDROID_PRODUCT_OUT environment variable is used, which must be an absolute path.
devices - list all connected devices
device commands:
adb push <local> <remote> - copy file/dir to device
adb pull <remote> <local> - copy file/dir from device

adb sync [ <directory> ] - copy host->device only if changed
(see ‘adb help all‘)
adb shell - run remote shell interactively
adb shell <command> - run remote shell command
adb emu <command> - run emulator console command
adb logcat [ <filter-spec> ] - View device log
adb forward <local> <remote> - forward socket connections
forward specs are one of:
tcp:<port>
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
adb jdwp - list PIDs of processes hosting a JDWP transport
adb install [-l] [-r] <file> - push this package file to the device and install it
(‘-l‘ means forward-lock the app)
(‘-r‘ means reinstall the app, keeping its data)
adb uninstall [-k] <package> - remove this app package from the device
(‘-k‘ means keep the data and cache directories)
adb bugreport - return all information from the device that
should be included in a bug report.
adb help - show this help message
adb version - show version num
DATAOPTS:
(no option) - don‘t touch the data partition
-w - wipe the data partition
-d - flash the data partition
scripting:
adb wait-for-device - block until device is online
adb start-server - ensure that there is a server running
adb kill-server - kill the server if it is running
adb get-state - prints: offline | bootloader | device
adb get-serialno - prints: <serial-number>
adb status-window - continuously print device status for a specified device
adb remount - remounts the /system partition on the device read-write
adb root - restarts adb with root permissions
networking:
adb ppp <tty> [parameters] - Run PPP over USB.
Note: you should not automatically start a PDP connection.
<tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
[parameters] - Eg. defaultroute debug dump local notty usepeerdns
adb sync notes:
adb sync [ <directory> ] <localdir> can be interpreted in several ways:
- If <directory> is not specified, both /system and /data partitions will be updated.
- If it is "system" or "data", only the corresponding partition is updated.
Adb命令部分中文表
下列表格列出了adb支持的部分命令,并对它们的意义和使用方法做了说明:
分类
命令
描述
说明
Options
-d
仅仅通过USB接口杢管理abd
如果丌叧是用USB接口杢管理则返回错误
-e
仅仅通过模拟器实例杢管理adb
如果丌是叧通过模拟器实例管理则返回错误
-s <serialNumber>
<序列号>
通过模拟器/设备的允许的命令号码杢发送命令杢管理adb (比如: "emulator-5556")
如果没有指定号码,则会报错
General
devices
查看所有连接模拟器/设备的设施的清单
help
查看adb所支持的所有命令。
version
查看adb的版本序列号
Debug
logcat [<option>] [<filter-specs>]
将日志数据输出到屏幕上
12 / 14
bugreport
查看bug的报告,如dumpsys , dumpstate和logcat 信息。
jdwp
查看指定的设施的可用的JDWP信息
可以用 forward jdwp:<pid> 端口映射信息杢连接指定的JDWP进程.例如:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000
Data
install <path-to-apk>
安装Android(可以模拟器/设施的数据文件.apk指定完整的路径)
pull <remote> <local>
将指定的文件从模拟器/设施的拷贝到电脑上
push <local> <remote>
将指定的文件从电脑上拷贝到模拟器/设备中
Ports and Networking
forward <local> <remote>
用本地指定的端口通过socket方法远程连接模拟器/设施
ppp <tty> [parm]...
通过USB运行ppp,需要提醒你的丌能自劢启劢PDP连接
Scripting
get-serialno
查看adb实例的序列号
get-state
查看模拟器/设施的当前状态
13 / 14
wait-for-device
如果设备丌联机就丌让执行,——也就是实例状态是 device 时
你可以提前把命令转载在adb的命令器中,在命令器中的命令在模拟器/设备连接之前是丌会执行其它命令的。示例如下:
adb wait-for-device shell getprop
需要提醒的是这些命令在所有的系统启劢启劢起杢之前是丌会启劢adb的,所以在所有的系统启劢起杢之前你也丌能执行其它的命令. 比如:运用install 的时候就需要Android包,这些包叧有系统完全启劢时才安装。例如:
adb wait-for-device install <app>.apk
上面的命令叧有连
14 / 14
接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启劢前执行就会有错误发生
Server
start-server
选择服务是否启劢adb服务进程
kill-server
终止adb服务进程
Shell
shell
通过远程shell命令杢控制模拟器/设备实例
shell [<shellCommand>]
连接模拟器/设施执行shell命令,执行完毕后退出远程shell *******************************************************************

cmd常用控制台
1、清屏命令:cls
2、列出当前目录详细信息:dir
3、删除文件:del xxx.txt

android adb常用命令
1.创建sdcard
mksdcard 50M D:/sdcard.img --> 创建一张容量为50M的SDCard


2.删除sdcard
cd d:/
del sdcard.img


3.把ljq.txt文件放在sdcard
adb push d:/ljq.txt /sdcard/


4.创建avd模拟器
android create avd -n avd名称 -t target平台编号
eg、android create avd -n android2.1 -t 8

说明:Error: Folder C:UsersAdministrator.androidavdljq.avd is in the way. Use --f
orce if you want to overwrite.(进入C:UsersAdministrator.androidavd目录,把ljq.avd文件夹删除即可)


5.启动模拟器
emulator -avd xxx
eg、emulator -avd android2.1
启动带sdcard模拟器
emulator -sdcard d:/sd.img -avd android2.1(android2.1之前创建好的一个虚拟设备的名称)


6.删除AVD(模拟器):
android delete avd -n name名称
eg、android delete avd -n android2.1


7.显示系统中全部android平台
android list targets


8.android list avd


9.adb devices


10.查看用户已安装的软件
adb shell
cd /data/app/
ls


11.安装软件
adb install d:abc.apk


12.卸载软件
adb shell
cd /data/app/
adb uninstall <软件名>
adb uninstall -k <软件名>
说明:如果加 -k 参数,为卸载软件但是保留配置和缓存文件. </B>
eg、adb uninstall com.ljq.activity


13.启动ddms:ddms


14.导出文件
adb pull adb pull <远程路径> <本地路径> 
eg、adb pull /sdcard/hrtx/123.gif d:/


15.导入文件
adb push <本地路径> <远程路径>
eg、adb pull d:/123.gif /sdcard/

16.进入模拟器的shell模式:
adb shell


17.在命令行中查看LOG信息:
adb logcat
adb logcat -s 标签名
eg、adb logcat -s MainActivity


18.删除系统应用:
adb remount(重新挂载系统分区,使系统分区重新可写)
adb shell
cd /system/app
rm *.apk


19.获取管理员权限:
adb root


20.启动Activity
adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)
eg、adb shell am start -n com.hrtx.activity/com.hrtx.activity.MainActivity


21.发布端口:
设置任意的端口号,做为主机向模拟器或设备的请求端口。
eg、adb forward tcp:5555 tcp:8000


22.查看bug报告:
adb bugreport


23.记录无线通讯日志:
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令设置记录:
adb shell
logcat -b radio


24.获取设备的ID和序列号:
adb get-product
adb get-serialno


25.访问数据库SQLite3
adb shell
sqlite3

*******************************************************************  

Android AIDL详解

Android_AIDL

1.     AIDL (Android Interface DefinitionLanguage )接口描述语言

2.     AIDL 适用于 进程间通信,并且与Service端多个线程并发的情况,如果只是单个线程 可以使用 Messenger ,如果不需要IPC 可以使用Binder

3.     AIDL语法:基础数据类型都可以适用,List Map等有限适用。static field 不适用。

 

要使用AIDL我们需要两个应用程序,一个作为Service端,一个作为Client端。详细步骤如下:

基本使用步骤:

第一步:在Service端建立.aidl文件。实际实现的接口是在 gen中自动生成的对应的抽象内部类 Stub。注意:

1、导入包名,不能在src目录下创建,否则在实现的时候找到Stub类。

2、如果有使用Object对象,需要该对象 implement Parcelable 接口,并且需要导入该接口包名+类名,如果是primitivetype 不需要这步。

3、定义方法名称。

4、所有的.aidl文件以及需要传递的对象接口需要在Service 与Client中各一份,并且包名要和服务器端的一样(建议从服务器端拷贝)。

示例代码:

package com.example.android_aidl_host.aidl;

interface IRemoteService{

    int getId();

   void setId(int id);

}

第二步:在Service中实现.aidl 接口(通常在service中实现)。

 

public class MyHostService extends Service{

    privateint id;

 

    @Override

    publicIBinder onBind(Intent intent) {

       //TODO Auto-generated method stub

       returnbind;

    }

 

    privatefinal IRemoteService.Stub bind = new IRemoteService.Stub() {

 

       @Override

       publicint getId() throws RemoteException {

           //TODO Auto-generated method stub

           returnid;

       }

 

       @Override

       publicvoid setId(int id) throws RemoteException {

           //TODO Auto-generated method stub

           MyHostService.this.id= id;

       }

    };

}

注意:在服务器端建立好service要在manifest文件中进行注册,并且为其加上action属性。我的配置如下:

<serviceandroid:name="com.example.android_aidl_host.MyHostService">

            <intent-filter>

                //其它程序通过此入口获得数据,就好比ContentProvider

                <actionandroid:name="com.xz.apk"/>

            </intent-filter>

</service>

经过以上两步服务器的代码就已经完成了,就等其它进程来获取数据了。下面来写Client端的代码。

第一步:在Activity中通过Intent意图绑定service。

Intent service = new Intent("com.xz.apk");//必须与服务器端一致

bindService(service, new MyConn(),BIND_AUTO_CREATE);

第二步:获取服务返回的stub对象。

iService = IRemoteService.Stub.asInterface(service);

完整的Activity代码如下:

public class MainActivity extends Activity {

    //aidl文件生成的java文件名

IRemoteService iService;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

          //绑定service

        Intent service = new Intent("com.xz.apk");

        bindService(service, new MyConn(),BIND_AUTO_CREATE);

    }

    public void changId(View view) {

        switch (view.getId()) {

        case R.id.set://客户端的set按钮

            try {

                   //调用服务器端的setId()方法

                iService.setId(200);

            } catch (RemoteException e) {

                e.printStackTrace();

            }

            break;

        case R.id.get: //客户端的get按钮

            try {

                   //调用服务器端的getId()方法

                iService.getId();

                Log.e("DDDDD",iService.getId() + "");

            } catch (RemoteException e) {

                e.printStackTrace();

            }

            break;

        default:

            break;

        }

    }

    private class MyConn implements ServiceConnection {

        @Override

        public void onServiceConnected(ComponentName name, IBinder service){

           //通过自动生成的Stub内部类,调用asInterface()方法实例化IRemoteService对象

    iService =IRemoteService.Stub.asInterface(service);

        }

        @Override

        public void onServiceDisconnected(ComponentName name) {

            // TODO Auto-generatedmethod stub

        }

    }

}

 

Demo2:通过AIDL传递对象(Person),此实例既传递了普通数据又传递了对象。

1、定义该对象Person,并实现Parcelable。

2、添加Person.aidl文件,并采用如下方式编写导入Person

   注意Person文件和Person.aidl文件必须放在同一个包中并且两者要同时存在,否则报错。

3、需要在引用到Person的.aidl文件中import+Person所在包名

4、需要在服务端和客户端都添加 Person.aidl与 Person.java文件并且需要一致。

Person类代码:

package com.example.android_aidl_mydemo_server.aidls;

import android.os.Parcel;

import android.os.Parcelable;

public class Person implements Parcelable {

    String name;

    int age;

    //省略了相应的get和set方法

    /**

     * 在想要进行序列号传递的实体类内部一定要声明该常量。常量名只能是CREATOR,类型也必须是

     * Parcelable.Creator<T>

     */ 

    public static final Parcelable.Creator<Person>CREATOR = newParcelable.Creator<Person>() {

       

         /***

         * 根据序列号的Parcel对象,反序列号为原本的实体对象

         * 读出顺序要和writeToParcel的写入顺序相同

         */ 

        public Person createFromParcel(Parcel in) {

//            String name =source.readString(); 

//              int age =source.readInt(); 

//              String sex =source.readString(); 

//              Beauty beauty =new Beauty(); 

//             beauty.setName(name); 

//              beauty.setAge(age); 

//             beauty.setSex(sex); 

//               

//              returnbeauty; 

            return new Person(in);

        }

        /**

         * 创建一个要序列号的实体类的数组,数组中存储的都设置为null

         */ 

        public Person[] newArray(int size) {

            return new Person[size];

        }

    };

    public Person() {   }

    private Person(Parcel in) {

        readFromParcel(in);

    }

    public int describeContents() {

        return 0;

    }

    public void readFromParcel(Parcel in) {

        age = in.readInt();

        name = in.readString();

    }

    /**

     * 将对象序列号dest 就是对象即将写入的目的对象 flags有关对象序列号的方式的标识

     * 这里要注意,写入的顺序要和在createFromParcel方法中读出的顺序完全相同。例如这里先

     * 写入的为name,

     * 那么在createFromParcel就要先读name

     */

    public void writeToParcel(Parcel dest, int flags) {

        dest.writeInt(age);

        dest.writeString(name);

    }

}

Person.aidl文件:

packagecom.example.android_aidl_mydemo_server.aidls;

parcelable Person;

InData.aidl文件:

packagecom.example.android_aidl_mydemo_server.aidls;

import com.example.android_aidl_mydemo_server.aidls.Person;

interface InData{

String getName();

void setName(String name);

Person getPerson();

}

服务器端的service文件:

package com.example.android_aidl_mydemo_server;

import com.example.android_aidl_mydemo_server.aidls.InData;

import com.example.android_aidl_mydemo_server.aidls.Person;

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.os.RemoteException;

public class MyServer extends Service {

    String name = "JACK";

    @Override

    public IBinder onBind(Intent arg0) {

        // TODO Auto-generatedmethod stub

        returnbinder;

    }

 

    private final InData.Stub binder = new InData.Stub() {

        @Override

        public String getName()throws RemoteException {

            // TODO Auto-generatedmethod stub

            returnname;

        }

        @Override

        public void setName(String name) throws RemoteException {

            // TODO Auto-generatedmethod stub

            MyServer.this.name = name;

        }

        @Override

        publicPersongetPerson() throws RemoteException {

            // TODO Auto-generatedmethod stub

            Person person = new Person();

            return person;

        }

    };

}

一说到service我又想起了一定不要忘记在manifest注册并加上action属性!

客户端MainActivity的代码:

package com.example.android_aidl_mydemo_client;

 

import android.app.Activity;

import android.content.ComponentName;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.IBinder;

import android.os.RemoteException;

import android.util.Log;

import android.view.Menu;

 

import com.example.android_aidl_mydemo_server.aidls.InData;

import com.example.android_aidl_mydemo_server.aidls.Person;

 

 

public class MainActivity extends Activity {

    InData inData;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    Intentservice=newIntent("com.ssss.xz.apk");

    bindService(service, new MyConnection(),BIND_AUTO_CREATE);

    }

    private class MyConnection implements ServiceConnection{

 

        @Override

        public void onServiceConnected(ComponentName name, IBinder service){

            // TODO Auto-generatedmethod stub

            inData=InData.Stub.asInterface(service);

            try {

                Log.e("SSSSSS",inData.getName());

                inData.setName("Hello AIDL");

                Log.e("SSSSSS",inData.getName());

                Person user=inData.getPerson();

                Log.e("HHHHHHHH",user.getName());

                Log.e("HHHHHHHH",user.getAge()+"");

            } catch (RemoteException e) {

                // TODO Auto-generatedcatch block

                e.printStackTrace();

            }

       

        }

 

        @Override

        public void onServiceDisconnected(ComponentName name) {

            // TODO Auto-generatedmethod stub

            inData=null;

        }

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; thisadds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

}

 *******************************************************************

android dx批处理

dx是将java的classes文件编译为字节码dex文件

技术分享

 

dx --dex --output=<要生成的classes.dex路径> <要处理的类文件的路径>

 

dx --dex --output=D:/HelloWorld/bin/classes.dex D:/HelloWorld/bin

*******************************************************************  

dexdump反编译Android程序

  反编译Android程序目前没有什么好的方法,但是在Android Emulator中可以找到一个名为dexdump(在Android SDK的Tools目标下)的程序, 通过dexdump可以查看出apk文件中的dex执行情况,ophone8.com粗略分析出原始java代码是什么样的和Dot Net中的Reflector很像。

android编译器生成的java class相关内容都放到了dex(.dex 是字节码文件,Dalvik VM上就运行的是.dex)文件中,为什么要反编译apk文件呢?

就目前来看Android开放度还很低,很多东西只有反编译官方的app才可以了解一些底层的东西。


 对于软件开发人员来说,保护代码安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,

首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex

热心网友 时间:2022-04-30 11:41

1. add-ons 这里面保存着附加库,比如google Maps,如果安装了OPhone SDK,这里也会有一些类库在里面。
2. docs 这里面是Android SDK API参考文档,所有的API都可以在这里查到。
3. extras/market_licensing 作为Android Market版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
4. platforms 是每个平台的SDK真正的文件,里面会根据API Level划分的SDK版本。
5. platform-tools 保存着一些通用工具,比如adb、和aapt、aidl、dx等文件。
6. samples 是Android SDK自带的默认示例工程。
7. tools 作为SDK根目录下的tools文件夹,这里包含了重要的工具,比如ddms用于启动Android调试工具。
8. extras 该文件夹下存放了google提供额USB驱动、Intel提供的硬件加速等附加工具包。

热心网友 时间:2022-04-30 12:59

Android SDK 目录下有很多文件夹,主要都是干什么的呢? 1. add-ons 这里面保存着附加库,比如google Maps,当然你如果安装了OPhone SDK,这里也会有一些类库在里面。 2. docs 这里面是Android SDK API参考文档,所有的API都可以在这里查到。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找专业防水队做完还漏水怎么维权 法院会受理房屋漏水造成的纠纷吗? 巴西龟最长活多久,家养!!! 养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 android SDK 文档目录下都有哪些文件?都代表着什么? android的sdk存放在什么目录 哪位大神知道Android studio的SDK默认是安装在哪里了,我找不到了。(除搜索外的方法) 如何用-cmd--命令行进入android sdk的安装目录 怎么查找android sdk安装路径 数字货币交易收过夜费是什么时间段? 数字货币交易平台有哪些? 怎么买卖数字货币? 数字货币合约交易是什么意思? 请问大家数字货币如何交易啊? 数字货币交易所合法吗? 数字货币合约交易是什么?哪个平台可以进行交易呀? 数字货币能用日币交易吗? 数字货币交易所怎么交易? 数字货币有哪几种交易形式? 数字货币有哪几种交易形式?什么方式最好? 欧易快捷买币确认下单提示交易完成后买入的数字货币1日内不可提币是怎么回事 法国园林的特点:主要的特点 法国中世纪的特色是什么? 法国政体的特点是什么? android sdk api文档在哪 android studio sdk怎么安装 eclipse 怎么设置android sdk路径 linux下android sdk怎么安装 怎么更改Android SDK Manager中SDK的安装路径? OPPOr7s怎么录屏? 请问IE浏览器保存在收藏夹里的网页 在我的电脑哪个文件夹啊 水果除了直接吃还有什么吃法呢? 苹果作为一种常见的水果,你觉得它都有哪些好吃的做法? 苹果香蕉梨子三种水果,每天吃两种有多少种不同的吃法。 怎样吃水果最健康? 水果也可以蒸着吃,你都知道哪些水果蒸熟,更有营养? 小亮家有苹果梨和橘子,妈妈规定小亮每天只能吃两种不同的水果各一个,小亮有多少种不同的吃法? 水果到底怎么吃好? 一些水果的高能吃法,水果到底应该怎么吃 水果的吃法有什么讲究? 水果蔬菜适宜的吃法有哪些? 水果怎么吃 20水果吃法禁区慎入 水果的隐藏吃法有哪些? 怎么看u盘的内容?