通过resign.jar重签名apk后出现raw目录下文件未找到的解决方法

问题: 通过resign.jar重签名的apk后,安装运行后直接出现闪退的情况,查看log的原因是提示android.content.res.Resources$NotFoundException: File res/raw/praise.wav。

其实通过这个提示信息就能够猜出一个大概了,就是我们使用resign.jar 对apk进行重签名的时候并没有将res/raw/目录下的文件打包重新打包进去。

下来是我们的解决方法
1. zip -d your-app.apk META-INF/\* 删除apk文件中的 META-INF
2. jarsigner -keystore ~/.android/debug.keystore -storepass android -keypass android APPNAME.apk androiddebugkey 重新生成新的apk文件。这个时候raw目录下的文件都已经打包进行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我无法为您提供完整的代码,因为这需要详细的系统设计和开发过程。但是,我可以为您提供一些思路和参考。 1. 选手注册登录: (1)数据库设计:创建一个选手表,包括选手id、用户名、密码、邮箱等字段。 ```sql CREATE TABLE `player` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` (2)注册功能:用户在注册页面输入用户名、密码和邮箱,系统将用户信息插入到选手表中。 ```java public boolean register(Player player) { // 判断用户名是否已经被注册 if (playerMapper.findByUsername(player.getUsername()) != null) { return false; } // 插入用户信息 playerMapper.insert(player); return true; } ``` (3)登录功能:用户在登录页面输入用户名和密码,系统通过查询选手表来验证用户是否合法。 ```java public Player login(String username, String password) { // 根据用户名查询用户信息 Player player = playerMapper.findByUsername(username); // 判断用户是否存在,并验证密码是否正确 if (player != null && player.getPassword().equals(password)) { return player; } return null; } ``` 2. 视频上传: (1)数据库设计:创建一个视频表,包括视频id、选手id、视频名称、视频路径等字段。 ```sql CREATE TABLE `video` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_id` int(11) NOT NULL, `name` varchar(50) NOT NULL, `url` varchar(100) NOT NULL, PRIMARY KEY (`id`), KEY `player_id` (`player_id`), CONSTRAINT `video_ibfk_1` FOREIGN KEY (`player_id`) REFERENCES `player` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` (2)上传功能:选手在上传页面选择要上传的视频文件,系统将视频文件保存到服务器,并将视频信息插入到视频表中。 ```java public boolean uploadVideo(int playerId, String name, MultipartFile file) { // 保存视频文件到服务器 String url = saveFile(file); if (url == null) { return false; } // 插入视频信息到数据库 Video video = new Video(playerId, name, url); videoMapper.insert(video); return true; } private String saveFile(MultipartFile file) { // 保存文件到指定目录 String dirPath = "video/"; String fileName = UUID.randomUUID().toString() + ".mp4"; String filePath = dirPath + fileName; try { File dir = new File(dirPath); if (!dir.exists()) { dir.mkdirs(); } file.transferTo(new File(filePath)); } catch (IOException e) { e.printStackTrace(); return null; } // 返回文件路径 return filePath; } ``` 3. 选手主页: (1)根据选手id查询选手信息,并在页面上展示选手的基本信息。 ```java public Player getPlayer(int playerId) { return playerMapper.findById(playerId); } ``` (2)查询选手上传的视频信息,并在页面上展示视频列表。 ```java public List<Video> getVideos(int playerId) { return videoMapper.findByPlayerId(playerId); } ``` 4. 提交退赛审请表: (1)创建一个退赛审请表,包括审请id、选手id、退赛原因等字段。 ```sql CREATE TABLE `resign` ( `id` int(11) NOT NULL AUTO_INCREMENT, `player_id` int(11) NOT NULL, `reason` varchar(100) NOT NULL, PRIMARY KEY (`id`), KEY `player_id` (`player_id`), CONSTRAINT `resign_ibfk_1` FOREIGN KEY (`player_id`) REFERENCES `player` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` (2)选手在退赛页面输入退赛原因,并提交退赛审请表。 ```java public boolean submitResign(int playerId, String reason) { // 插入退赛申请到数据库 Resign resign = new Resign(playerId, reason); resignMapper.insert(resign); return true; } ``` 以上是一个简单的思路和参考,具体实现还需要根据具体需求进行详细设计和开发。希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值