如何从apk中得到version code

来源:互联网 发布:域名邮箱怎么弄 编辑:程序博客网 时间:2024/05/27 06:12
Android中用Package 这个类来代表一个apk。
final Package pkg = parseBaseApk(baseApk, assets, flags);
我们Package  是由parseBaseApk 来赋值的,我们看看parseBaseApk是如何得到version code
可以看到1389行的实现com.android.internal.R.styleable.AndroidManifest_versionCode
原来version code是R文件中的一个常量


        String[] outError) throws XmlPullParserException, IOException {
1356        final boolean trustedOverlay = (flags & PARSE_TRUSTED_OVERLAY) != 0;
1357
1358        AttributeSet attrs = parser;
1359
1360        mParseInstrumentationArgs = null;
1361        mParseActivityArgs = null;
1362        mParseServiceArgs = null;
1363        mParseProviderArgs = null;
1364
1365        final String pkgName;
1366        final String splitName;
1367        try {
1368            Pair<String, String> packageSplit = parsePackageSplitNames(parser, attrs, flags);
1369            pkgName = packageSplit.first;
1370            splitName = packageSplit.second;
1371        } catch (PackageParserException e) {
1372            mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
1373            return null;
1374        }
1375
1376        int type;
1377
1378        if (!TextUtils.isEmpty(splitName)) {
1379            outError[0] = "Expected base APK, but found split " + splitName;
1380            mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME;
1381            return null;
1382        }
1383
1384        final Package pkg = new Package(pkgName);
1385        boolean foundApp = false;
1386
1387        TypedArray sa = res.obtainAttributes(attrs,
1388                com.android.internal.R.styleable.AndroidManifest);
1389        pkg.mVersionCode = pkg.applicationInfo.versionCode = sa.getInteger(
1390                com.android.internal.R.styleable.AndroidManifest_versionCode, 0);
1391        pkg.baseRevisionCode = sa.getInteger(
1392                com.android.internal.R.styleable.AndroidManifest_revisionCode, 0);
1393        pkg.mVersionName = sa.getNonConfigurationString(
1394                com.android.internal.R.styleable.AndroidManifest_versionName, 0);
1395        if (pkg.mVersionName != null) {
1396            pkg.mVersionName = pkg.mVersionName.intern();
1397        }
}
0 0
原创粉丝点击