导航:首页 > 操作系统 > android升级代码

android升级代码

发布时间:2022-11-07 01:22:33

android应用旧版本自动更新代码未实现,用户使用的是老版本,怎样让用户更新到新版本

那就没办法了,看你app里有没有通知用户消息的一些东西吧,如果有消息推送的话,可以给用户推送新地址。

⑵ Android系统可以升级吗怎么升级

安卓系统可以升级,升级过程如下:

下面以升级Android2.3.4为例子,注意:Android2.3.4只支持从Android2.3.3升级,如果系统是Android2.3.1的话,必须要先升级到Android2.3.3才可以再升级为2.3.4。

另外,这个升级是增量升级,并不会删除原先系统中的数据,所以大家可以放心升级。

第一步:先要手机下载Android2.3.4的升级数据包,我用的电脑给你搜了一下。

甜点命名法开始于Android 1.5发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:纸杯蛋糕(Android 1.5),甜甜圈(Android 1.6),松饼(Android 2.0/2.1),冻酸奶(Android 2.2),姜饼(Android 2.3),蜂巢(Android 3.0)。

冰激凌三明治(Android 4.0),果冻豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛轧糖(Nougat,Android 7.0),奥利奥(Oreo,Android 8.0)。

⑶ android系统 如何要用差分做升级

1、首先是差分包patch的生成。在update.zip中的patch文件夹中有需要与系统文件同名但是以xxx.p 为后缀的文件,就是生成的差分patch文件。OTA系统差分包的制作,使用命令
./build/tools/releasetools/ota_from_target_files -n -i <旧包> <新包> <差分包名>
在查阅ota_from_target_files 的代码可知,是在函数WriteIncrementalOTAPackage里生成差分包的,在这个函数里边创建了common.Difference这个类,继续跟进,在common.py中的类 class Difference(object):里可以看到:
diff_program = DIFF_PROGRAM_BY_EXT.get(ext, "bsdiff")
2、看到了android中提供用来制作差分增量升级包的工具,在android的代码目录下 \external\bsdiff bsdiff是二进制差分工具,其对应的bspatch是相应的补丁合成工具,需要注意的是增量升级的补丁包,是需要在服务器端,即PC端完成:命令:bsdiff oldfile newfile patchfile。
3、bspatch的命令格式为:bspatch oldfile newfile patchfile。

⑷ android app 静默升级需要包名吗

实现静默安装必须要2个前提条件:1、必须有对机器的ROOT权限 ; 2、必须有编译源码的环境

具备了以上2个条件就可以实现静默安装了。。

1、首先必须实现一个观察者的类,来监听apk安装成功或者失败,所以我们先写一个类去继承IPackageInstallObserver.Stub,

由于IPackageInstallObserver.Stub不是开放api,所以我们自己必须在改类前面加import android.content.pm.IPackageInstallObserver;

具体代码如下:

[java] view plain

class PackageInstallObserver extends IPackageInstallObserver.Stub {

public void packageInstalled(String packageName, int returnCode) {

// 该方法里面可以根据returnCode的值判断apk安装成功或者失败

// 1表示成功 0表示失败

if (returnCode == 1) {

Log.e(TAG, packageName + " install Success");

} else {

Log.e(TAG, packageName + "install fail ");

}

}

}

2、现在就来看看静默安装的方法了

其中方法中的参数packageName是你需要安装的应用apk的包名 , path表示apk在本地所在的路径

[java] view plain

public void SilentInstall(String packageName, String path) {

Uri uri = Uri.fromFile(new File(path));

int installFlags = 0;

PackageManager pm = getPackageManager();

try {

PackageInfo packageInfo = pm.getPackageInfo(packageName,

PackageManager.GET_UNINSTALLED_PACKAGES);

if (packageInfo != null) {

installFlags = PackageManager.INSTALL_REPLACE_EXISTING;

}

} catch (NameNotFoundException e) {

Log.e(TAG, "NameNotFoundException = " + e.getMessage());

}

PackageInstallObserver observer = new PackageInstallObserver(); // PackageInstallObserver

// 就是1中实现的观察者类

pm.installPackage(uri, observer, installFlags, packageName);

}

好了,上面2个步骤做好了后在AndroidMainfest.xml加上安装包的权限

[java] view plain

加如权限之后就可以编写Android.mk文件了,这个Android.mk我是从 源码package/APP/PackageInstaller中的Android.mk拷贝过来,然后将其中的

[java] view plain

LOCAL_PACKAGE_NAME := Test //其中Test是你项目的名称

做完上述所有步骤之后,就可以将这个项目放在源码环境下编译了,编译成成功后会在out\target\proct\leader75_6628_ics2\system\app生成改项目的apk

然后push到system/app或者编译在升级包里面就可以使用了。

注意:单独编译项目的时候,可以将一些没用的文件夹删除掉,比如gen bin等,下面图片就是我编译之前删除后的目录结构

⑸ android 怎么实现应用内更新

android 实现应用内更新的方法为:
1、新建一个Android工程命名为:UpdateDemo。
2、新建一个UpdateManager.java类,负责软件更新功能模块,代码如下:
package com.tutor.update;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ProgressBar;

public class UpdateManager {

private Context mContext;

//提示语
private String updateMsg = "有最新的软件包哦,亲快下载吧~";

//返回的安装包url
private String apkUrl = "http://softfile.3g.qq.com:8080/msoft/179/24659/43549/qq_hd_mini_1.4.apk";

private Dialog noticeDialog;

private Dialog downloadDialog;
/* 下载包安装路径 */
private static final String savePath = "/sdcard/updatedemo/";

private static final String saveFileName = savePath + "UpdateDemoRelease.apk";

/* 进度条与通知ui刷新的handler和msg常量 */
private ProgressBar mProgress;

private static final int DOWN_UPDATE = 1;

private static final int DOWN_OVER = 2;

private int progress;

private Thread downLoadThread;

private boolean interceptFlag = false;

private Handler mHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case DOWN_UPDATE:
mProgress.setProgress(progress);
break;
case DOWN_OVER:

installApk();
break;
default:
break;
}
};
};

public UpdateManager(Context context) {
this.mContext = context;
}

//外部接口让主Activity调用
public void checkUpdateInfo(){
showNoticeDialog();
}

private void showNoticeDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle("软件版本更新");
builder.setMessage(updateMsg);
builder.setPositiveButton("下载", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
showDownloadDialog();
}
});
builder.setNegativeButton("以后再说", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
noticeDialog = builder.create();
noticeDialog.show();
}

private void showDownloadDialog(){
AlertDialog.Builder builder = new Builder(mContext);
builder.setTitle("软件版本更新");

final LayoutInflater inflater = LayoutInflater.from(mContext);
View v = inflater.inflate(R.layout.progress, null);
mProgress = (ProgressBar)v.findViewById(R.id.progress);

builder.setView(v);
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
interceptFlag = true;
}
});
downloadDialog = builder.create();
downloadDialog.show();

downloadApk();
}

private Runnable mdownApkRunnable = new Runnable() {
@Override
public void run() {
try {
URL url = new URL(apkUrl);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.connect();
int length = conn.getContentLength();
InputStream is = conn.getInputStream();

File file = new File(savePath);
if(!file.exists()){
file.mkdir();
}
String apkFile = saveFileName;
File ApkFile = new File(apkFile);
FileOutputStream fos = new FileOutputStream(ApkFile);

int count = 0;
byte buf[] = new byte[1024];

do{
int numread = is.read(buf);
count += numread;
progress =(int)(((float)count / length) * 100);
//更新进度
mHandler.sendEmptyMessage(DOWN_UPDATE);
if(numread <= 0){
//下载完成通知安装
mHandler.sendEmptyMessage(DOWN_OVER);
break;
}
fos.write(buf,0,numread);
}while(!interceptFlag);//点击取消就停止下载.

fos.close();
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}

}
};

/**
* 下载apk
* @param url
*/

private void downloadApk(){
downLoadThread = new Thread(mdownApkRunnable);
downLoadThread.start();
}
/**
* 安装apk
* @param url
*/
private void installApk(){
File apkfile = new File(saveFileName);
if (!apkfile.exists()) {
return;
}
Intent i = new Intent(Intent.ACTION_VIEW);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()), "application/vnd.android.package-archive");
mContext.startActivity(i);

}
}
第三步:在MainActivity.java也就是主Activity调用,代码如下:
package com.tutor.update;

import android.app.Activity;
import android.os.Bundle;

public class MainAcitivity extends Activity {

private UpdateManager mUpdateManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//这里来检测版本是否需要更新
mUpdateManager = new UpdateManager(this);
mUpdateManager.checkUpdateInfo();
}
}
3、添加程序所用的资源与权限:
下载的时候用到了ProgressBar,所以事先写了一个progress.xml布局文件,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">

<ProgressBar
android:id="@+id/progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
/>
</LinearLayout>
4、运行查看。

⑹ android app更新代码怎么实现

<update>
<version>2</version>
<name>_xinwen_1.1.0</name>
<url>http://gdown..com/data/wisegame/f98d235e39e29031/xinwen.apk</url>
</update>

在这里我使用的是XML文件,方便读取。由于XML文件内容比较少,因此可通过DOM方式进行文件的解析:

public class ParseXmlService
{
public HashMap<String, String> parseXml(InputStream inStream) throws Exception
{
HashMap<String, String> hashMap = new HashMap<String, String>();

// 实例化一个文档构建器工厂
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 通过文档构建器工厂获取一个文档构建器
DocumentBuilder builder = factory.newDocumentBuilder();
// 通过文档通过文档构建器构建一个文档实例
Document document = builder.parse(inStream);
//获取XML文件根节点
Element root = document.getDocumentElement();
//获得所有子节点

⑺ android开发应用版本升级怎么实现

应用场景: 1、在界面中显示应用程序的版本号; 2、用户启动该应用,后台判断该应用是否是最新版本。 上述情景都需要在程序中自动获取到应用的版本号。 思路简介: 在Android中,应用程序的版本号是在AndroidManifest.xml文件中进行配置的,而PackageInfo类则封装了从该配置文件中获取的所有信息,描述了包内容的整体信息,因此,可以使用PackageInfo对象的versionName属性获取应用的版本号。 要怎么获取PackageInfo对象呢?可以通过PackageManager对象来获取。PackageManager是一个检索当前已安装在设备上的相关应用程序包的各种信息的类。PackageManager对象中的getPackageInfo方法可以获取PackageInfo对象,该方法需要传递两个参数:应用包名和条件。通常情况下,应用程序的包名可以通过Activity或Context(Activity继承自Context)的getPackageName()方法获取,而添加可以有很多设置,通常设置为0。 最后是PackageManager对象的获取,Context对象提供了getPackageManager()方法来获取该对象。 综上,模板代码如下:(注意,此处封装的方法位于某个Activity中,因此直接使用this来代替Context对象) /** * 获取版本号 * @return 当前应用的版本号 */ public String getVersion() { try { PackageManager manager = this.getPackageManager(); PackageInfo info = manager.getPackageInfo(this.getPackageName(), 0); String version = info.versionName; return this.getString(R.string.version_name) + version; } catch (Exception e) { e.printStackTrace(); return this.getString(R.string.can_not_find_version_name); } }

⑻ iQOO安卓11怎么升12

iQOO安卓11升12方法Fota方式升级,通过手机设定,一般,关于设备,系统更新,在电脑中下载安装Kies软件,注意,下载安装kies时手机与电脑不要连接。安装后手机和电脑通过USB连接,打开Kies软件,如有手机系统或固件新版本时Kies软件会有固件升级提示,点击升级即可。

安卓介绍

Android是一种基于Linux的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用安卓或安致。Android操作系统最初由AndyRubin开发,主要支持手机。

2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。

第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视,数码相机,游戏机,智能手表等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。

⑼ 如何简单实现安卓app自动更新功能

app自动更新程序可以参考如下代码:
第一步 服务器端:
服务端提供一个借口,或者网址,我这里就用的服务器是tomcat,这里提供一个网址如下:
//也就是一个json数据接口
public static final String UPDATE_URL = "http://192.168.1.103:8080/update.json";
我们来看下json数据参数:
{
//app名字
appname: "爱新闻1.1",
//服务器版本号
serverVersion: "2",
//服务器标志
serverFlag: "1",
//是否强制更新
lastForce: "1",
//apk下载地址,这里我已经下载了官方的apk,放到了服务器里面
updateurl: "http://192.168.1.103:8080/36Kr.apk",
//版本的更新的描述
upgradeinfo: "V1.1版本更新,你想不想要试一下哈!!!"
}
好了以上的是服务器端的信息,在这里不需要多说了,我们来看下客户端的吧。
第二步 客户端需要实现:
首先我们要去解析服务端给的json,那么我们就要来创建一个model类了(代码过多,这里只有字段,getter和setter方法自己创建):
//app名字
private String appname;
//服务器版本
private String serverVersion;
//服务器标志
private String serverFlag;
//强制升级
private String lastForce;
//app最新版本地址
private String updateurl;
//升级信息
private String upgradeinfo;
在这里使用了一个辅助类,基本和model字段差不多:
public class UpdateInformation {
public static String appname = MyApplication.getInstance()
.getResources().getString(R.string.app_name);
public static int localVersion = 1;// 本地版本
public static String versionName = ""; // 本地版本名
public static int serverVersion = 1;// 服务器版本
public static int serverFlag = 0;// 服务器标志
public static int lastForce = 0;// 之前强制升级版本
public static String updateurl = "";// 升级包获取地址
public static String upgradeinfo = "";// 升级信息
public static String downloadDir = "wuyinlei";// 下载目录
}
我们知道,我们在进入app的时候,这个时候如果检测到服务器端有了新的版本,就回弹出提示框,提示我们更新。这个我们在MainActivity里面处理逻辑(onCreate()方法里面):
OkhttpManager.getAsync(Config.UPDATE_URL, new OkhttpManager.DataCallBack() {
@Override
public void requestFailure(Request request, Exception e) {
}
@Override
public void requestSuccess(String result) {
try {
Log.d("wuyiunlei",result);
JSONObject object = new JSONObject(result);
UpdateInfoModel model = new UpdateInfoModel();
model.setAppname(object.getString("appname"));
model.setLastForce(object.getString("lastForce"));
model.setServerFlag(object.getString("serverFlag"));
model.setServerVersion(object.getString("serverVersion"));
model.setUpdateurl(object.getString("updateurl"));
model.setUpgradeinfo(object.getString("upgradeinfo"));
tmpMap.put(DeliverConsts.KEY_APP_UPDATE, model);
} catch (JSONException e) {
e.printStackTrace();
}
//发送广播
sendBroadcast(new Intent(UpdateReceiver.UPDATE_ACTION));
}
});
当然了,我们也要注册和结束广播:
/**
* 广播注册
*/
private void registerBroadcast() {
mUpdateReceiver = new UpdateReceiver(false);
mIntentFilter = new IntentFilter(UpdateReceiver.UPDATE_ACTION);
this.registerReceiver(mUpdateReceiver, mIntentFilter);
}
/**
* 广播卸载
*/
private void unRegisterBroadcast() {
try {
this.unregisterReceiver(mUpdateReceiver);
} catch (Exception e) {
e.printStackTrace();
}
}
好了,接下来我们看下我们自定义的广播接收者UpdateReceiver .java:
/**
* 版本更新升级 广播接受者
*
*/

阅读全文

与android升级代码相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163