AndroidManifest修改重打包全过程:
作者: 蔡建良 2013-06-26
准备工具:
apktool.jar和signapk.jar
下载:
http://download.csdn.net/detail/janehlp/5651605
1)采用apktool命令行反编译apk资源文件。
>apktool d c:GPS.Test.Plus_1.2.4.apk D:Javaandroid_apkcrackedGPS.Test.Plus_1.2.4
2)修改androidAndroidManifest.xml文件,修改主程序activity配置。
添加两处:
android:exported="true"
和
<intent-filter>
<action android:name="com.eclipsim.gpsstatus.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
完整配置如下:
<activity android:label="@string/app_label" android:icon="@drawable/icon" android:name="GPSStatus" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="com.eclipsim.gpsstatus.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
被调用的包名为: com.eclipsim.gpsstatus。
被调用的Action名为: com.eclipsim.gpsstatus.VIEW。
3)采用apktool命令行将修改后资源打包成apk。
>apktool b D:Javaandroid_apkcrackedGPS.Test.Plus_1.2.4 mynew.apk
4)采用signapk对apk进行签名。
>java -jar signapk.jar testkey.x509.pem testkey.pk8 mynew.apk mynew2.apk
最后,mynew2.apk为最终安装包文件,安装后就能被其它程序调用。
5) android程序调用代码。
String gpsStatusAction = "com.chartcross.gpstestplus.VIEW";
String gpsStatusPackage = "com.chartcross.gpstestplus";
boolean hasGpsStatus = false;
List<PackageInfo> installedPackages = new ArrayList<PackageInfo>();
installedPackages = context.getPackageManager().getInstalledPackages(0);
if (installedPackages.size() == 0)
installedPackages = context.getPackageManager().getInstalledPackages(PackageManager.GET_ACTIVITIES);
if (installedPackages.size() > 0) {
for( PackageInfo packageInfo : installedPackages ) {
String packageName = packageInfo.packageName;
if (packageName.startsWith(gpsStatusPackage)) {
hasGpsStatus = true;
break;
}
}
} else {
hasGpsStatus = true;
}
if (hasGpsStatus) {
Intent intent = new Intent(gpsStatusAction);
context.startActivity(intent);
} else {
}