BigNews
BigNews copied to clipboard
存储权限申请了,差分失败,从后台拿了查分包合并也失败了
private static String[] PERMISSIONS_STORAGE = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; //请求状态码 private static int REQUEST_PERMISSION_CODE = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guyurumian);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
Log.e("quanxian"," 1");
//if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, PERMISSIONS_STORAGE, REQUEST_PERMISSION_CODE);
Log.e("quanxian"," ");
//}
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.back_iv:
case R.id.back_tv:
this.finish();
break;
case R.id.guanyu_dafen:
new MyThread1().start();//创建并启动线程 差分
break;
case R.id.guanyu_banben:
new MyThread2().start();//创建并启动线程 合并
break;
case R.id.guanyu_tiaokuan:
Intent intent = new Intent(this, FuwuTiaokuan.class);
startActivity(intent);
break;
}
}
public class MyThread1 extends Thread {//继承Thread类
public void run() {
//重写run方法
/**
* oldApkPath: 老安装包路径
* newApkPath: 新安装包路径
* patchPath: 升级/差分包路径(输出)
* return: 成功返回 true,否则为 false。
* 差分
*/
String oldApkPath = getApplicationContext().getPackageResourcePath();
File sdFile = Environment.getExternalStorageDirectory();
String sdStrings = sdFile.getAbsolutePath();
String sdString = getSystemFilePath(AboutRuMian.this);
Log.e("sdString","="+sdString);
boolean state=false;
File file=new File(sdString + "/app-debug.apk");
if(file.exists()){
Log.e("文件"," 存在");
}else{
Log.e("文件"," 不存在");
}
Log.e("旧文件"," 地址="+oldApkPath);
File file1=new File(oldApkPath);
if(file1.exists()){
Log.e("旧文件"," 存在");
}else{
Log.e("旧文件"," 不存在");
}
try{
state=BigNews.diff(oldApkPath, sdString + "/app-debug.apk", sdStrings + "/patchPath.patch");
}catch (Exception e){
Log.e("差分失败"," ss0");
}
Log.e("state","="+state);
Looper.prepare();
Toast.makeText(AboutRuMian.this,"求差分包",Toast.LENGTH_SHORT).show();
Looper.loop();
if(state){
Log.e("差分成功"," ss");
}else{
Log.e("差分失败"," ss");
}
}
}
private static String getSystemFilePath(Context context) {
String cachePath;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath();
// cachePath = context.getExternalCacheDir().getPath();//也可以这么写,只是返回的路径不一样,具体打log看 } else { cachePath = context.getFilesDir().getAbsolutePath(); // cachePath = context.getCacheDir().getPath();//也可以这么写,只是返回的路径不一样,具体打log看 } return cachePath; }
public class MyThread2 extends Thread {//继承Thread类
public void run() {
//重写run方法
/**
* oldApkPath: 老安装包路径
* newApkPath: 新安装包路径(输出)
* patchPath: 升级/差分包路径
* return: 成功返回 true,否则为 false。
* 合并
*/
String oldApkPath = getApplicationContext().getPackageResourcePath();
File sdFile = Environment.getExternalStorageDirectory();
//String sdString = sdFile.getAbsolutePath();
String sdString = getSystemFilePath(AboutRuMian.this);
File file=new File(sdString + "/old_new.patch");
if(file.exists()){
Log.e("文件"," 存在");
}else{
Log.e("文件"," 不存在");
}
boolean state=BigNews.make(oldApkPath, sdString + "/new1.apk", sdString + "/old_new.patch");
Log.e("state"," ="+state);
if(state){
Log.e("合并成功"," s");
File apkfile = new File(sdString+"/new1.apk");
if (!apkfile.exists()) {
return;
}
Intent i = new Intent(Intent.ACTION_VIEW);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // 7.0+以上版本 //跳转安装apk
Uri apkUri = getUriForFile(AboutRuMian.this,
AboutRuMian.this.getApplicationContext().getPackageName() + ".provider", apkfile);
//与manifest中定义的provider中的authorities="com.xinchuang.buynow.fileprovider"保持一致
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setDataAndType(apkUri, "application/vnd.android.package-archive");
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
} else {
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setDataAndType(Uri.parse("file://" + apkfile.toString()),
"application/vnd.android.package-archive");
}
AboutRuMian.this.startActivity(i);
}else{
Log.e("合并失败"," ");
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_PERMISSION_CODE) {
for (int i = 0; i < permissions.length; i++) {
Log.e("guanyurumian", "申请的权限为:" + permissions[i] + ",申请结果:" + grantResults[i]);
}
}
}
安卓萌新,请指教
如果这是个demo 方便的话可以把demo提交到你的仓库里 我下载运行来看看 谢谢你
在公司的项目里,
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.thoughtics.beauty-1/base.apk"],nativeLibraryDirectories=[/data/app/com.thoughtics.beauty-1/lib/arm, /data/app/com.thoughtics.beauty-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]]] couldn't find "libbigNews.so"
at java.lang.Runtime.loadLibrary0(Runtime.java:984)
at java.lang.System.loadLibrary(System.java:1554)
at ha.excited.BigNews.
你换方法3导入把 这种问题不是我这个代码的问题了
E/sdString: =/storage/emulated/0/Android/data/com.thoughtics.beauty/files/Pictures/app-debug.apk E/文件: 存在 E/旧文件: 地址=/data/app/com.thoughtics.beauty-1/base.apk E/旧文件: 存在 E/state: =false
路径是要用绝对路径吗,
我把demo中jni相关的配置在自己的项目里导入了,合并 差分终于返回ture了 ,但文件没有生成,怎么办呢
哭死,假的,差分 合并没有成功,我随便写个地址返回的也是ture
这么多人都ok,我还提供了demo ,就你不成功。 报错说的那么清楚,连so都没导入进去,都告诉你用第三种方法导入,你还说我这玩意假的。 我做这个库方便大家,又没收你钱,你弄不好还要说我这个有问题,你自己玩去吧。
我又没说你的东西是假的,我只是误以为我已经实现了,测试才发现有错误,都是假象,所以说是假的,
你把你出问题的地方 弄个demo 提交你自己仓库里 把链接贴这里 看看你是怎么搞的
你把你出问题的地方弄个demo提交你自己仓库里放在链接贴这里看看你是怎么搞的
您好大神,我这边把项目下载下来在本地无法运行啊,报SIMPLE: Error configuring,工程里也没有jni文件夹,没有看到so库。是不是这个原因啊