keytool和jarsiger是jdk带的工具,zipalign是android sdk带的工具
1.使用keytool生成private key
命令行:keytool -genkey -v -keystore my-release-key.keystore -alias my-rele
ase -keyalg RSA -keysize 2048 -validity 10000
这样就在用户目录下生成一个my-release-key.keystore文件
2.获取该private key的 MD5 fingerprint (在android中使用google地图时,获取地图的api key需要MD5 fingerprint )http://code.google.com/intl/zh-CN/android/add-ons/google-apis/maps-api-signup.html
命令行:keytool -list -alias my-release -keystore my-release-key.keystore
3.从eclipse导出.apk文件,在package explorer中选择project,右键 Android Tools > Export Unsigned Application Package
4.使用private key给.apk文件签名
命令行:jarsigner -verbose -keystore my-release-key.keystore LFM.apk my-release
5.验证签名是否成功
加-verbose和-certs能输出更详细的信息
6.优化应用程序
命令行:zipalign -v 4 LFM.apk LFM-Align.apk
开发手机应用程序的时候,除了底层对API的掌握外,最重要的仍是屏幕分辨率概念的里加尔,由于各个手机厂商采用的屏幕尺寸不同,UI接口呈现及布局自然也在、各种迥异。
Android可设置为随着窗口大小调整缩放比例,但即使如此,手机程序设计人员还是必须清楚的知道手机屏幕的边界,以避免缩放后造成的布局变形等问题,下面是个小例子,只需要几句即可获得手机分辨率,当中最关键的就是DisplayMetrics类的应用
metrics ['metriks] 度量,测量
heightPixels:显示高度的绝对像素
widthPixels:显示宽度的绝对像素
运行结果:
代码一:
public Bitmap ResizeBitmap(Bitmap bitmap, int newWidth) { int width = bitmap.getWidth(); int height = bitmap.getHeight(); float temp = ((float) height) / ((float) width); int newHeight = (int) ((newWidth) * temp); float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); // resize the bit map matrix.postScale(scaleWidth, scaleHeight); // matrix.postRotate(45); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); bitmap.recycle(); return resizedBitmap; }
代码二:
public Bitmap resizeBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
int originWidth = bitmap.getWidth(); int originHeight = bitmap.getHeight(); // no need to resize if (originWidth < maxWidth && originHeight < maxHeight) { return bitmap; } int width = originWidth; int height = originHeight; // 若图片过宽, 则保持长宽比缩放图片 if (originWidth > maxWidth) { width = maxWidth; double i = originWidth * 1.0 / maxWidth; height = (int) Math.floor(originHeight / i); bitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); } // 若图片过长, 则从上端截取 if (height > maxHeight) { height = maxHeight; bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height); } // Log.i(TAG, width + " width"); // Log.i(TAG, height + " height"); return bitmap; }