androidsdkdx
Ⅰ 如何部署android服务器端的java代码
Java平台般三版本:Java ME(微型版用于某些手机)、Java SE(标准版用于台式电脑)、Java EE(企业版用于服务器端应用)谈Java我通指Java SE版本包含虚拟机编译器
首先Java代码编译称字节码间格式字节码目标电脑运行虚拟机快速解析目标电脑硬件操作系统所需要本机格式
除发者提供编写处运行优势Java能通垃圾收器(GC)实现自内存管理发者免手代码释放用象内存虽功能非用且降低代码引入内存问题风险增加运行销需要停执行垃圾收进程
本文比较Java SE用于Android发Java间差异首先我介绍发者习惯Java
SE语言结构及何Android运行其我介绍何优化AndroidJava代码何优化内存配及何恰处理线程
比较AndroidDalvik JavaJava SE
虽远Android现前发者能用Java编程语言移设备编写应用程序Java功能极限版本称Java
ME(微型版)同移设备需编写同代码写应用程序能支持Java
ME任何手机运行几乎能外由于存线商店应用发布程极其复杂
Android问世发者提供构建智能手机强应用机发者需用Java编程语言及熟知标准Java
API编写代码尽管Android发者仍使用Java SE编译器编译应用程序发现James
Gosling发JavaAndroid设备Java存许同处
Android设备运行VM(虚拟机)称Dalvik初由谷歌Dan
Bornstein发适用于CPU内存受限移设备Java SEDalvik Java存些差异主要体现虚拟机Java
SE使用栈机设计Dalvik设计基于寄存器机器Android SDKdx工具Java
SE栈机器字节码转换基于寄存器Dalvik机器字节码该转换步骤由IDE自完
基于栈虚拟机基于寄存器虚拟机定义及差异列入我讨论范围由于历史原Android使用基于寄存器虚拟机虽基于寄存器虚拟机比基于栈虚拟机快32%限于执行解释字节码虚拟机(说解释型虚拟机)Android
2.2版本(称Froyo)前Dalvik虚拟机都纯解释型Froyo版本引入JIT编译器(即编译)Java
SE早优势
JIT编译称态翻译执行前字节码翻译本机代码(图1所示)主要两处首先消除些纯解释型虚拟机销;其能本机代码执行优化通静态编译代码做例JIT编译器运行CPU选择合适优化根据应用程序输入析代码何运行便进行步优化
图1Android JavaJava SE翻译步骤
虽AndroidDalvik JIT编译器发展前景要达Java SEJIT编译器般稳定、熟度尚需段间Dalvik JIT现Android提供巨性能优势且断改善
JAVA
SE虚拟机Dalvik虚拟机另区别者进行优化运行同机器实例机启叫做zygote进程该进程创建第Dalvik实例由实例创建所其实例应用程序启zygote进程收创建新虚拟机实例请求并给该应用程序创建新进程(图2所示)发者已习惯于Java
SE发设计能看起切实际优势避免由应用程序运行失败导致Dalvik虚拟机崩溃继引发应用程序崩溃
图2Android启新Dalvik虚拟机实例
AndroidJava
SE除运行虚拟机同外实现API式Android属于javajavax包API都自Apache
Harmony(源项目旨重新实现Java SE软件栈该项目201111月再维护)发面些APIJava
SE包类似存些差别例谷歌HttpUrlConnection类进行Java SE版本所没重升级
外Android平台移除Java
SE关API例Swing/AWT包完全移除Android使用同UI框架其移除APIRMI、CORBA、ImageIOJMX或者替换特定Android版本(android包空间内)或者些实际原根本存
优化AndroidJava代码
经改进Java
SE具备些简化编写复杂代码结构新特性其些特性让整流程变更简单发者需要解何及何确使用另外由于Java
SE用于服务器端发(使用Java企业版API)发员专门服务器端Java代码进行优化注解Java虚拟机脚本语言支持服务器端发进行优化例证虽些工具构建端发强发Android客户端代码些特性作用甚至起反作用Java发者已经习惯于限量RAMCPUAndroid发需要密切关注性能内存配简单说发者需要使用稍微同待Android端发
随着Android首发布情况所改变曾经些Android尽量用Java规范重新推荐主要Android目前JIT编译器解决些规范导致性能问题
本文讨论编写Android应用程序需要解Java代码我深究Java编程语言细节重点关注Android发重要东西发者仍需解数适用于Java SE规则建议同适用于AndroidDalvik虚拟机
Android类型安全枚举
Java SE 5.0新增许便发者新特性其值期待引入类型安全枚举枚举代码用表示属于某组几选择早期版本Java用整型量解决问题虽技术行容易错请看面代码:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
问题虽些量期望没机制保证setState()接收同值要设置添加检查旦非预期值发者需要处理错误发者所需要编译检查非赋值类型安全枚举解决问题所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = State.STOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意声明同类型安全值新加内部枚举类编译解决非赋值问题所代码更容易错
Dalvik虚拟机没JIT编译器优化代码建议Android平台使用枚举类型使用整型量相比种设计带内存性能损失更些版本Android
API存整型量原今更强JIT编译器及断改进Dalvik虚拟机发者必再担问题放胆使用类型安全枚举即
仍存些情况使用整型量更选择像intJava基本类型增加GC销外Android SDK许已API仍依赖基本类型比Handler类——种情况没太选择
Android增强版for循环
Java SE 5.0引入增强版for循环提供通用缩写表达式遍历集合数组首先比较五种:
void loopOne(String[] names) {
int size = names.length;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection names) {
Iterator iterator = names.iterator();
while (iterator.hasNext()) {
printName(iterator.next());
}
}
// 要ArrayList使用增强版for循环
void loopFive(ArrayList names) {
int size = names.size();
for (int i = 0; i < size; i++) {
printName(names.get(i));
}
}
面显示四种同遍历集合数组式前面两种着相同性能所读取元素放数组使用增强版for循环Collection象说增强版for循环使用迭代器遍历元素着相同性能ArrayList象应避免使用增强版for循环
仅需要遍历元素且需要元素位置定要使用数组或者ArrayList所其Collection类些情况更慢
般情况读取元素几乎变数据集性能要求高建议使用规数组数组固定添加数据影响性能所编写代码要考虑所素
队列、同步锁
通情况应用程序线程产数据另线程使用见例线程获取网络数据另线程(操作UI主线程)些数据展现给用户种模式称产者/消费者模式面向象编程课程发者用算实现该模式能要花几面介绍些简化产者/消费者模式实现现类
1. 更智能队列
虽已现类并能用更少代码实现该功能许Java发者仍选择使用LinkedList及同步块实现队列功能发者java.util.concurrent包找同步相关类外本包包含信号量、锁及单变量进行原操作类考虑面使用标准LinkedList实现线程安全队列代码
public class ThreadSafeQueue {
private LinkedList mList = new LinkedList();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mList.offer(value);
mLock.notifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mList.isEmpty()) {
try {
mLock.wait();
} catch (InterruptedException e) {
//简洁起见忽略异处理
}
}
return mList.poll();
}
}
}
虽段代码确并能考试满实现测试段代码浪费间实际所前面代码用面行代替
LinkedBlockingQueue blockingQueue =
new LinkedBlockingQueue();
面行代码能像前面例提供相同类型阻塞队列甚至能提供额外线程安全操作java.util.concurrent包含许选队列及并发映射类所般情况建议使用像前示例使用更代码
2. 更智能锁
Java提供synchronized关键字允许发者创建线程安全代码块synchronized关键字易于使用容易滥用性能造负面影响需要区读数据写数据synchronized关键字并效幸java.util.concurrent.locks包工具类种情况提供支持
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLock.WriteLock writeLock = mLock.writeLock();
try {
writeLock.lock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLock.unlock();
}
}
public String getName() {
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
}
// 重复代码再赘述
}
面代码展示使用ReentrantReadWriteLock允许并发线程数据进行读访问并确保同间线程写入相同数据
代码使用synchronized关键字仍处理锁问题效论何种情况都要考虑ReentrantReadWriteLock否
Ⅱ android sdk requires the new Build Tools
没有构建工具啊,选open SDK Manager,SDK Manager界面中在Tools分支下有Build-tools
Ⅲ (特别专业的Android修改问题)关于Android中classes.dex反编译并回编的一个问题
过程应该是不可逆的.
若是能通过修改jar来修改class.dex文件,最终达到修改整个apk程序的目的,那android程序就没有版权一说了...
Ⅳ android 工程 如何一键编译打包成apk
打包步骤:
1、生成keystore
按照下面的命令行在C:ProgramFilesJavajdk1.6.0_10in>目录下,输入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystoreandroid.keystore
参数意义:-validity主要是证书的有效期,写100000天;空格,退格键都算密码。
命令执行后会在C:ProgramFilesJavajdk1.6.0_10in>目录下生成android.keystore文件。如图-1
图-2EclipseAndroid打包工具
接下来的步骤就是不断的next。下面仅贴出图片,不解释。
step2:选择打包的项目
step3:选择生成的EclipseAndroid.keystore文件并输入密码
step4:选择aliaskey并输入密码
step5:最后选择生成androidapk文件的目录及文件名
最终生成的apk文件。
Ⅳ Android SDK Tools,Platform-tools,Build-tools分别有什么作用
platform-tools包含开发app的平台依赖的开发和调试工具,包括 adb、fastboot等
android sdk里的各目录作用
AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机。
SDK Manager.exe:sdk管理工具,用于管理、下载sdk、sdk工具,能及扩展工具
tools目录:包括测试、调试、第三方工具。模拟器、数据管理工具等。
build-tools目录:编译工具目录,包含了转化为davlik虚拟机的编译工具。
包括
aapt(Android Asset Packaging Tool):编译应用程序的资源文件(包括AndroidManifest.xml和你的Activities的xml文件),生成R.java文件,这样你就可以从你的java代码中引用资源。
aidl:把.aidl 接口转换成java接口.
dx:转化.class中间代码为dvlik中间代码,所有经过java编译的生成.class文件都需要此工具进行转换,最后打包进apk文件中.
dexmp:mp devlik中间代码
platform-tools目录:包含开发app的平台依赖的开发和调试工具。
包括
adb:android调试工具
fastboot:boot工具
platforms/<android-version>目录:包括android的平台。包含在android.jar库中。你必须指一个平台为你的编译目标。
system-images目录:编译好的系统映像。模拟器可以直接加载。
sources目录:androidsdk的源码目录
samples目录:sdk例子
Ⅵ Android SDK 环境下如何使用adb软件
Android SDK开发工具中有几个重要的指令:adb、ddms、emulator与mksdcard、dx tool等。
ADB系统除错与连结工具
使用adb指令进行APK组件的安装,虽然adb(Android debug bridge)是Android系统的除错工具,但是从放置文件到SD存储卡与安装APK应用程序,adb是操作Android 系统不可或缺的重要工具。adb是与Android仿真器沟通最重要的桥梁。如果要跟Android底层的linux操作系统进行沟通,就必须通过 Android SDK tools目录下的adb (android debug bridge) 指令来进行操作。这个adb除了提供程序码除错功能外,最重要的功能是它可以将Eclipse编译好所生成的Android应用程序组件Android Package (apk),直接连接安装到Android仿真器上或者手机装置上,因此程序开发在Eclipse环境中完成后,Android仿真器上就直接会有这个应 用程序的图标icon了。另外adb除错工具也支持命令列模式shell指令,可以输入指令来进行一些除错动作。这些实用的adb指令如下:
$ adb devices (显示当前有多少个仿真器正在运行)
List of devices attached
emulator-5554 device
emulator-5556 device
emulator-5558 device
运行adb devices会显示有多少个仿真器正在运行,上面的例子指出有5554、5556、5558三个仿真器正在运行,如果没有运行仿真器,则显示 no device。
$ adb -s <serialNumber> <command> (指定仿真器来操作)
$ adb -s emulator-5554 install email.apk
adb -s可以指定仿真器序号,用来选择操纵哪一个仿真器,例如adb -s emulator-5554 install email.apk,指定将email.apk安装在仿真器emulator-5554。
$ adb install apkfile (安装APK应用程序组件)
例如:adb install email.apk
$ adb uninstall package (移除APK应用程序组件)
例如:adb uninstall com.android.email
adb install与adb uninstall可以用来安装与移除APK 应用程序组件,但是必须注意的是adb install后面是接apk文件名称,然而adb uninstall 后面是域名形式的package名称,例如com.android.email。详细的package名称可以由Android操作系统目录/data /data或者由/data/app来查得。
$ adb shell (进入Android系统指令列模式)
$ ls
$ dmesg (查看Android Linux Kernel运作消息)
运行adb shell可以进入Android操作系统指令列模式,如此一来就可以直接看到Android系统的目录结构,因为Android是Linux操作系统的 一种,所以Shell指令和Linux系统是相同的,例如ls(显示文件目录)、cd(进入目录)、rm(删除文件)、mv(移动文件)、mkdir(生 成目录)与rmdir(删除目录)等指令。
$ adb push <file/dir> /sdcard (复制文件到SD存储卡)
例如:adb push mp3 /sdcard
$ adb pull <file/dir> . (从Android系统下载文件)
例如:adb pull /data/app/com.android.email
adb push可以上载文件到SD存储卡目录/sdcard,因为其他目录有访问权限问题无法写入,所以一般都是将文件放到/sdcard目录下。adb pull则是将文件从Android系统下载到一般计算机上,常用的例子除了从/sdcard下载文件外,也可以从/data/data或/data /app目录将APK文件抽出来,提供已经安装成功的APK应用程序,给其他使用者安装。
$ adb logcat (监控仿真器运作记录)
adb logcat会实时监控Android仿真器运行时所生成的记录,此项功能对于程序开发人员用来除错帮助很大,开发人员可以从记录中得到应用程序运行时发生的错误消息。运行adb logcat后,若要离开监控模式,可以按Ctrl+C。
$ adb bugreport (生成adb除错报告)
开发人员若要进一步得知系统生成的所有错误消息报告,可以运行adb bugreport指令来实现,该指令会将Android系统的mpsys、mpstate与logcat信息都显示出来。
$ adb get-state (获得adb服务器运作状态)
adb get-state会显示adb服务器的运作状态为何,共有offline (脱机)、bootloader (开机中)、与device (运作中) 三种状态。
$ adb start-server (启动adb服务器)
$ adb kill-server (关掉adb服务器)
通常启动Android服务器时,就会启动adb服务器了。可以使用adb get-state来查知adb的状态。如果没有启动可以运行adb start-server启动它,若不想进行除错监控,可以运行adb kill-server关掉它。
$ adb forward tcp:6100 tcp:7100 (更改仿真器网络TCP通信端口)
Android仿真器内定的TCP port为6100,若有需要可以运行adb forward指令改成另外一个通信端口。
$ adb version (显示adb版本)
您可以运行adb version查看当前使用的Android SDK adb版本。
$ adb help (显示adb指令参数)
adb help会显示所有adb指令的用法,
参考资料:http://blog.chinaunix.net/uid-20332519-id-3176865.html
Ⅶ android SDK 文档目录下都有哪些文件都代表着什么
Android SDK 目录下有很多文件夹,主要都是干什么的呢?
1. add-ons 这里面保存着附加库,比如google Maps,当然你如果安装了OPhone SDK,这里也会有一些类库在里面。
2. docs 这里面是Android SDK API参考文档,所有的API都可以在这里查到。
3. market_licensing 作为Android Market版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。
4. platforms 是每个平台的SDK真正的文件,里面会根据API Level划分的SDK版本, 这里就以Android 2.2来说,进入后有一个android-8的文件夹,android-8进入后是Android 2.2 SDK的主要文件,其中ant为ant编译脚本,data保存着一些系统资源,images是模拟器映像文件,skins则是Android模拟器的皮肤,templates是工程创建的默认模板,android.jar则是该版本的主要framework文件,tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexmp和编译脚本dx。
5. platform-tools 保存着一些通用工具,比如adb、和aapt、aidl、dx等文件,Android123提示,这里和platforms目录中tools文件夹有些重复,主要是从android 2.3开始这些工具被划分为通用了。
6. samples 是Android SDK自带的默认示例工程,里面的apidemos强烈推荐初学者运行学习,对于sqlite数据库操作可以查看NotePad这个例子,对于游戏开发 Snake、LunarLander都是不错的例子,对于Android主题开发Home则是android m5时代的主题设计原理。
7. tools 作为SDK根目录下的tools文件夹,这里包含了重要的工具,比如ddms用于启动Android调试工具,比如logcat、屏幕截图和文件管理器,而draw9patch则是绘制android平台的可缩放png图片的工具,sqlite3可以在PC上操作SQLite数据库,而 monkeyrunner则是一个不错的压力测试应用,模拟用户随机按键,mksdcard则是模拟器SD映像的创建工具,emulator是android模拟器主程序,不过从android 1.5开始,需要输入合适的参数才能启动模拟器,traceview作为android平台上重要的调试工具。
8. usb_driver 顾名思义,保存着android平台google官方机型的驱动如nexus one、nexus s,同时也有一些老机型驱动的支持,比如说htc dream、htc magic和Motorola 的droid。
参考自:blog.csdn.net/coolwzjcool/article/details/7761663
Ⅷ android 3.0 之后 aptbuilider.bat 移除 之后的 用命令打包
1.使用aapt生成R.java类文件:
例:
C:\Snake>aapt p -f -m -J gen -S res -I android.jar -M AndroidManifest.xml
其中
-f -m -J F:\explorer\AndroidByread\gen 代表按覆盖的形式在gen目录下生成带包路径的R.java,
-S res指定资源文件 ,
-I android.jar 指定使用的android类包,
-M AndroidManifest.xml指定程序的配置文件
2.使用android SDK提供的aidl.exe把.aidl转成.java文件(如无aidl接口文件可省略):
3.第三步 编译.java类文件生成class文件:
C:\Snake>javac -classpath android.jar -d bin src\com\example\android\snake\*.java gen\com\example\android\snake\R.java
-classpath android.jar 指定使用的android类包,
-d bin指定生成的类文件的位置 ,后面的两个都是源文件.
4.使用android SDK提供的dx.bat命令行脚本生成classes.dex文件:
C:\Snake>dx --dex --output=c:\snake\bin\classes.dex c:\snake\bin
第一个参数是生成的目标文件,第二个是class文件所在的目录(必须使用绝对路径)
5.生成应用程序apk文件:
C:\Snake>aapt p -f -F snake.apk -v -u -z -M AndroidManifest.xml -S res -A assets -I android.jar
用法同步骤1.
6.把前面生成的classes.dex文件压缩到apk文件,最终生成可运行的apk应用程序
C:\Snake>aapt add snake.apk bin\classes.dex
7.Android Apk 签名
Apk签名首先要有一个keystore的签名用的文件 。
keystore是由jdk自带的工具keytool生成的。
具体生成方式参考:
开始->运行 ->cmd->cd到你安装的jdk的目录里,我的是C:\Program Files\Java \jdk1.6.0_10\bin
然后输入:
keytool -genkey -alias asaiAndroid.keystore -keyalg RSA -validity 20000 -keystore asaiAndroid.keystore
-alias 后面跟的是别名这里是 asaiAndroid.store
-keyalg 是加密方式这里是RSA
-validity 是有效期 这里是20000
-keystore 就是要生成的keystore的名称 这里是asiAndroid.keystore
然后按回车键
按回车后首先会提示你输入的密码:这个在签名时要用的,要记住
然后会再确认你的密码。
之后会依次叫你输入姓名、组织单位、组织名称、城市区域、省份名称、国家代码 (CN)等。
开始签名。
在 C:\Program Files\Java\jdk1.6.0_10\bin 还提供一个工具 jarsigner.exe
运行命令给APK签名:
jarsigner -verbose -keystore asaiAndroid.keystore -signedjar Lotteryonline_signed.apk LotteryOnline.apk asaiAndroid.keystore
-keystore: keystore的名称
LotteryOnline_signed.apk: 签名后的APK
LotteryOnline.apk: 签名前的APK
然后按回车:会要求输入刚才设置 的密码,输入后按回车就开始签名了。
Ⅸ 一个超级大的安卓SDK,解压之后怎么关联到ubuntu14
android sdk包括开发android app所需要的编译、调试、测试开发工具和API库。
下载android sdk:
http://developer.android.com/sdk/index.html
在这个下载页中提供两种下载方式:
集成了adt的ide和android sdk的包,即包含了android sdk、adt、eclipse的包。下载后,解压就可以了用了,所有依赖关系统都已设置好了。
仅仅只有android sdk的包。
下载、安装androidsdk
设置androidsdk环境变量
由于我们需要了解详细的过程。所以我们目前选择下载仅仅只有android sdk的包。
安装、设置:
windows平台下:
下载后,解压到到目录:
E:sourceandroidandroid-sdk-windows
设置环境变量:ANDROID_SDK=E:sourceandroidandroid-sdk-windows
linux平台下:
下载集成了的sdk包
k@k-C410:/data/adt-bundle-linux-x86_64-20130917$ ls
eclipse sdk
设置sdk的环境变量:
export ANDROID_SDK=/data/adt-bundle-linux-x86_64-20130917/sdk
放到~/.bashrc文件中。
如果你是新手,看到这里就可以了,下面的内容你可能会看得晕,但是等你看完后面的文章后,再回头看下面的内容,你就会好理解了.
android sdk浏览:
在根目录中:
AVD Manager.exe:虚拟机管理工具
SDK Manager.exe:sdk管理工具
tools目录:包括测试、调试、第三方工具。模拟器、数据管理工具等。
build-tools目录:编译工具目录,包含了转化为davlik虚拟机的编译工具。
platform-tools目录:包含开发app的平台依赖的开发和调试工具。包括 adb、fastboot等
platforms/<android-version>目录:包括android的平台。包含在android.jar库中。你必须指一个平台为你的编译目标。
system-images目录:编译好的系统映像。模拟器可以直接加载。
sources目录:androidsdk的源码目录
samples目录:sdk例子
android sdk工具介绍:
SDK Manager.exe:sdk管理工具,用于管理、下载sdk、sdk工具,能及扩展工具。
zipalign:
对齐工具。用于对签名后的apk包进行对齐。
更多信息可参考《Linux就该这么学》
Ⅹ android SDK下各目录的用途,以及在不同系统下哪些是通用的
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提供的硬件加速等附加工具包。