这周有需求需要开发一个Aandroid平台的开发引擎,目的是可以降低从J2ME项目移植到Android平台的移植时间,最佳的耗时最快可以达到1到2天,甚至是几个小时,相当于只是在J2ME增加一个移植机型。
OK,狂编代码,设计的功能都完成后,发生杯具了,测试程序居然不能获取按键事件和触摸事件。出现了可恶的提示:
No window to dispatch pointer action 0
No window to dispatch pointer action 1
视图是使用SufaceView的,代码结构和官方例子有点不同,为的是把Android的差异性隐藏起来,程序员面对的只是类似J2ME的程序框架,究竟啥原因了?
接下来的是,查资料,问高手,狂修改结构,结果没高手可以帮我解决问题,资料也找不到头绪。OK,静下心来,由0开始,重新编写一个最简单的例子,这个例子是可以获取全部事件的,再慢慢修改结构,结果加上多个功能代码后,丢失事件又出现了,噢,MY GOD!真是令人疯狂的世界。
再比较比较比较。。。
法克。。。
终于定位到问题所在。。。
原来。。。。是这样
问题出在设置屏幕全屏的那行代码,这行代码是在网上找来的:
this.getWindow().setFlags(WindowManager.LayoutParams.TYPE_STATUS_BAR,
WindowManager.LayoutParams.TYPE_STATUS_BAR);
但这个代码是起作用的,但它屏蔽了事件。。。
再上网找找设置屏幕全屏的代码,找到,但变成这样:
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
这又是程序员生涯中遇到的一个挫折,但又一次给解决掉,特此记录一下。。。
1.有时候我们的程序建立很多activity,你想关闭所有,其实这是没有必要的,至于为啥 是看见别人说的,如果你非要关闭所有 有两个方法 第一个 使用intent flag FLAG_ACTIVITY_CLEAR_TOP which brings the targeted activity to the top of the stack and closes anything else that may have been open since
他的意思是说 会保留主activity,然后关必其他的,所以你使用上面的标记之后然后finish就可以了
另一个就是startActivityForResult,这个需要你为每个activity有个反馈信息 然后受到信息关掉。
2.减少大图片占用内存的方法,最好是使用RGB_565 ,少用ARGB_8888 ,其他的尽量不用
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon, options);
安装
1.先装JAVA环境,JDK/JRE都行,官网下载 装过的就跳过吧
2.下载apktool.jar及相关文件,这里下apktool-1.0.0.tar.bz2 和apktool-install-windows-2.1_r01-1.zip
3.解压apktool.jar到 C:\Windows 解压apktool-install-windows.zip到任意文件夹(例如E盘根目录)
4.Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看。会列出一些帮助的话就成功了。
Apktool 命令apktool d XXX.apk ABC 反编译XXX.apk到文件夹ABC
apktool b ABC 从文件夹ABC重建APK,输出到ABC\dist\out.apk
然后我们反编译一枚软件玩玩…AutoMemoryManager的免费版底部有一条广告,去掉它吧。
把com.lim.android.automemman.apk放到同文件夹(我的就是E盘根目录)
Win+R 运行CMD
E:<回车>
E:\>apktool d com.lim.android.automemman.apk AMM <回车>
I: Baksmaling…
I: Decoding resource table…
I: Decoding resources…
I: Copying assets and libs…
现在文件被decode到E:\AMM了,打开E:\AMM\res\layout\main.xml看,所有都可见了吧~
编辑第59行
<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_parent” android:layout_height=”wrap_content” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
改为
<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip” android:layout_height=”0.0dip” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
然后CMD输入
E:\>apktool b AMM
I: Checking whether sources has changed…
I: Smaling…
I: Checking whether resources has changed…
I: Building resources…
I: Building apk file…
用Auto-sign签名E:\AMM\dist\out.apk 安装
这样广告就不见了