在 Android 里,同一程序的不同版本是不能共存的,安装了一个版本再安装另一个版本,则之前安装的那个版本会被覆盖或者被取代,这导致我们不能同时使用两个版本。然而,由于兲朝的某些设备,有时有必要安装两个版本。比如 Opera Mini 4.2 的国际版(中转服务器)和 Opera Mini 4.2 的中国版。有人会说:不是有 Opera Mini 5.x 吗?没错,那个版本的确能与 4.2 共存,但是它实在太烂了,所以能安装两个不同的 4.2 版本(不同点仅在服务器地址),一直是我的夙愿。经过一段时间的折腾,我成功了。本教程就将简要介绍制作方法。本文的环境以 Windows 为例,也适用于 Unix-like OS。本文关键字:多版本 Android 应用共存。
一、准备工具
- JRE。可在
Java.com
上下载。已经安装过 JRE 或者 JDK 的用户可以跳过。 - Notepad++。一款上手好用的文本编辑器是很重要的,不要用落后的 Windows 记事本了,它会把 Unix 换行符破坏的。当然如果是你是 Unix-like OS 用户,可以跳过此步。
- android-apktool。这个工具是用来反编译
.apk
文件的。注意要下载两个压缩包,然后解压到同一目录里才能使用,详细使用方法见它的说明。另外,建议将此工具的路径添加到PATH
变量里,以方便下面的使用,以下教程假设你已经把它添加到PATH
里了,所以不再写完整路径。如果你不知道如何添加PATH
,则直接把 apktool 的几个文件复制到%systemroot%
里好了。 - Auto-Sign。这是一个签名工具。解压到某目录备用。
- 原版的 Opera Mini 4.2 for Android。这东西在 Opera 官方网站等地方已经下载不到了,但是在 Opera 的合作伙伴
GetJar.com
上倒还是能找到,虽然页面上标注的版本是5
,但是下载下来其实是原版的4.2
……真有趣。(如果刚才那个地址失效了,请点击这里下载。) - 足够的耐心。
二、制作 Opera Mini 4.2 for Android 改服版(中转服务器)
这一部分的制作在这里也有教程,但是方法较繁琐且叙述不是很清楚,以下的教程更清楚一些。
- 反编译 apk 文件。把上面下载到
OperaMini.apk
放到顺手的工作路径下,比如%userprofile%
下面。并在 cmd 窗口里执行以下命令:Microsoft Windows [Version 6.1.7600] Copyright (c) 2009 Microsoft Corporation. All rights reserved. C:\Users\wzyboy>apktool d OperaMini.apk I: Baksmaling... I: Loading resource table... I: Decoding resources... I: Loading resource table from file: C:\Users\wzyboy\apktool\framework\1.apk I: Copying assets and libs... C:\Users\wzyboy>
- 修改服务器地址。执行完成后用 Notepad++ 打开新出现的
OperaMini\smali\Code.smali
文件,定位到第 41 行和第 47 行,这里可以看到两个服务器地址,前者是 socket 连接用的,后者是 http 连接用的。如果你知道某个支持 socket 的德意志服务器的地址的话,就把它们填写进去吧。更推荐的方法是用第三方的中转服务器,由于第三方的服务器只支持 http,所以需要把前者的地址“破坏”掉,比如改成fuck://gfw.tld/
这样的。而后者则改成完成的第三方中转服务器地址。网上有很多公开的中转服务器的地址,搜索一下便可抓到一些,如果要自己搭建的话,教程见这里。 - 重新打包。在 cmd 窗口里执行以下命令即可:
C:\Users\wzyboy>apktool b OperaMini I: Checking whether sources has changed... I: Smaling... I: Checking whether resources has changed... I: Building resources... I: Building apk file...
- 重新签名。把
OperaMini\disk\OperaMini.apk
复制到 Auto-Sign 的目录下面,把扩展名改为zip
,然后双击sign.bat
,按提示按下两次任意键,如果一切正常的话,应该是这样的:Auto-Sign Created by Dave Da illest 1 Edited to be easier to use with APK files by mixpix405 Make sure the APK you want signed is the only APK inside this folder Press any key to continue . . . .apk is now being signed. The signed version be named your_app_signed.apk If no errors, signing complete. If you DO see errors, good luck figuring it out, as I will be absolu tely no help :) Press any key to continue . . .
- 现在可以把这个文件传输到安装了。
三、制作 Opera Mini 4.2 for Android 中国版(共存版)
Opera Mini 国际版的好处大家都心知肚明,但国服版也有优势——浏览国内网站的速度非常快。我经常在手机淘宝上买东西,如果用国际版服务器访问手机淘宝的话,那个速度真是令人抓狂。但是,由于两个版本的 Package 名称是相同的,所以无法同时安装,安装了一个另一个就被卸载了,所以,要对这个版本做一些小小的手术。我搜索了一下,中文和英文的 Android 网站里,完全没有多版本 Android 应用程序共存的解决方案(不知道别的语言有没有),不过,在这位仁兄的指导下,我终于折腾出来了。这应该是第一篇公开的多版本 Android 应用共存的教程吧……?下面说步骤:
第一部分
- 反编译。方法见上文。
- 修改服务器地址。这回应该修改成中国版的服务器地址,当然是有 socket 连接的(真棒):
socket://59.151.106.229:1080 http://59.151.106.229:80/
- 获取 Server key。一开始我没有做这一步,结果失败了很多次,悔死了。Server key 是一串 320 个字符长度的数字与字母组合。不同的服务器不同的 Opera Mini 版本的 Server key 是不同的,对于
4.2
版本来说,主要是两组,一组是兲朝服务器,一组是国际版服务器,由于国际版服务器的 Server key 是通用的,所以之前把国际版改成中转的国际版的过程不需要修改 Server key,而把国际版改成中国版则要修改的。Server key 可以从官方的中国版里提取,我已经提取出来了。由于 Server key 太长,为了不撑破 Opera Mini 用户的页面,我把它单独放到一个文本文件里了,请点击此处打开这个文本文件。把文件里中国版的 Server key 复制下来备用。 - 修改 Server key。一开始我并不知道 Server key 在哪里改,于是花了很大的精力在那 400 多个
.smali
和.xml
文件里找,找的过程是□□□□□□□□□□□□□□□□□□□□□(此处删去 1024 字),最后终于发现它在OperaMini\smali\ad.smali
文件里。用 Notepad++ 打开这个一共有5987
行的文件,定位到第192
行,看到那个长长的字符串了吧?用刚才获取的 Server key 替换它吧。 - 修改
AndroidManifest.xml
及其它。这一步是使两个版本共存的关键,也是比较麻烦的一步。为了搞定它,我□□□□□□□□□□□□□□□□□□□□□(此处删去 1024 字),最后终于成功了。下面详解:
第二部分
- 用 Notepad++ 打开
OperaMini\AndroidManifest.xml
,内容如下:<?xml version=”1.0″ encoding=”UTF-8″?>
<manifest android:versionCode=“6” android:versionName=“4.2” package=“org.microemu.android.Browser”
xmlns:android=“http://schemas.android.com/apk/res/android”>
<uses-permission android:name=“android.permission.INTERNET” />
<uses-sdk android:minSdkVersion=“1” />
<application android:label=“@string/app_name” android:icon=“@drawable/app_icon”>
<activity android:name=“org.microemu.android.MicroEmulator” android:configChanges=“keyboardHidden|orientation”>
<intent-filter>
<action android:name=“android.intent.action.MAIN” />
<category android:name=“android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
</manifest> - 注意底色为黄色的那一部分,那就是 Opera Mini 4.2 for Android 的 Package name,正是由于两个版本的 Package name 是相同的,所以无法共存(同时安装),我们需要把它改掉,比如改成
org.microemu.android.Browser
。但是这里先不要改,待会儿再改。 - 当然,只改这个 Package name 是不行的,事实证明,只改动它,最后编译出来的
.apk
文件虽然可以正常安装,但是是无法运行的,一运行就直接 FC。所以还要改动一些东西,经过我□□□□□□□□□□□(此处删去 512 字)的折腾,最终发现需要改动的东西如下:
第三部分
- 打开 Notepad++,按
Ctrl+Shift+F
打开Find in Files
对话框,在Find what
里填写Browser
,在Replace with
里填写cnBrowser
,在Filter
里填写*.smali; *.xml
,把Directory
设为 Opera Mini 反编译后的文件所在的目录,然后点击Replace in Files
按钮,等待几秒钟,替换完成,关闭之。 - 还有两个地方要修改。一个是
OperaMini\smali\Browser.smali
,把它的文件名改成cnBrowser.smali
。另一个是OperaMini\smali\org\microemu\android\Browser
,这是一个目录,把它的名字也改成cnBrowser
。
第四部分
- 重新打包。方法见上文。
- 重新签名。方法见上文。
- 传输到手机里安装吧!
美化
- 安装好之后的效果就像本文的题图那样,有两个 Opera Mini 4.2 的图标,怎样区分呢?一个比较好的方法是改图标。在完成上文第三部分的操作之后,可以修改
OperaMini\res\drawable\app_icon.png
文件,比如加一个“Chinternet”标志之类的。我则是直接把它改成了灰度图(喜欢就右击保存吧):
四、写给懒人
好吧好吧,肯定有人认为上面的步骤太繁琐了……于是,我添加了这一节,提供已经修改好的 Opera Mini 4.2 for Android 中国服务器共存版下载:
om4-android-cn-nnic-final-signed.apk
五、其它
- 正如之前所说,本文修改 Opera Mini 4.2 的方法也可以活用于其它的程序,使程序的不同版本能够共存于 Android 之中,希望能够帮到未来的读者。
- 我还有5个月就高考了,压力很大,博客更新得越来越低频了。不过自我感觉文章质量并没有下降。这篇文章我花了不少心思写的,如果你看完觉得它还不错的话,可以点击此处添加点评论什么的……Google Reader 用户可以按一下键盘上的
l
键表示你喜欢这篇文章 ^_^ 。没有订阅本博客的用户可以点此订阅。 - 转载本文请注明出处:https://wzyboy.im/post/635.html,谢谢合作。
六、补充
这个补充是来自本文发表半年后的了……有人做了一个 6.0 版的共存版的教程,见此。